客户端应用程序和令牌 authentication/validation OAuth
Client application and token authentication/validation OAuth
我正在尝试使用我的 javascript 客户端应用程序实施 OAuth。
我已经启动了服务器 运行.
我的工作流程如下:
- 打开应用
- 检查令牌是否存在
- 验证令牌
- 如果不存在或无效,请转到 oauth 服务器获取令牌
- 返回应用并重复 2 和 3
- 我一切正常显示我的应用程序
我不确定如何实施第 2 点。我知道我需要为此再次调用服务器,但验证端点在哪里?
我只有 /authorize、/user 和 /logout
还有request应该怎么构成?我是否将令牌附加为 GET 参数,仅此而已?
如果有人拦截有效令牌怎么办?
取决于您的应用程序,但由于您有一个 javascript 网络应用程序,很可能无法对其凭据保密,因此您需要实施 Implicit Grant
OAuth 2.0 规范。但是,如果您的应用程序可以对其凭据保密,则您应该实施 Client Credentials Grant
(服务器端应用程序),因为它更安全。
I am not sure how to implement point 2
您应该将访问令牌存储在 Web 应用程序的某个位置,例如 localStorage
。
用户第一次访问您的 Web 应用程序时,该用户将没有访问令牌,也没有与您的授权服务器的会话。您的 Web 应用程序可以通过执行以下操作来查看您是否拥有访问令牌:
if (!localStorage.getItem('accessToken') {
window.location.replace('https://your-authorization-server/authorize?response_type=token&client_id=<CLIENT_ID>&redirect_uri=<CALLBACK_URL>&scope=<SCOPE>');
}
如果没有访问令牌,您需要重定向到您的授权服务器,以便用户可以使用授权服务器登录。用户登录后,授权服务器将使用有效的访问令牌将用户重定向回您的 Web 应用程序(在用户已授予您的 Web 应用程序希望代表该用户访问的任何资源的权限之后)。此访问令牌必须作为名为 access_token
的哈希片段公开,即:
https://web-app.com#access_token=123456789X
现在您的 Web 应用程序可以提取访问令牌并将其存储在某处。
I understand that I need to make another call to the server for this
but where is the validation endpoint? I only have /authorize, /user
and /logout
您的授权服务器需要令牌验证端点。您的 Web 应用程序将使用此端点来验证所述令牌(您存储在某处的令牌,例如 localStorage
)。当使用访问令牌调用此端点并且证明令牌有效时,用户可以继续,否则用户将被重定向到授权服务器。如果用户已经与授权服务器建立了会话,则用户将立即使用新的访问令牌重定向回来,否则用户需要先进行身份验证(登录)。
Also how should the request be formed? Do I attach token as a GET
parameter and thats all?
有些发送 GET 请求,访问令牌作为 url 查询参数,其他发送 POST 请求,访问令牌作为请求正文的有效负载。
What if somebody intercepts the valid token?
始终使用 https
并且您的访问令牌应在有限的时间内有效。
需要记住的一点是,由于您的应用程序无法对其凭据保密,因此您需要实施 Implicit Grant
,这意味着当授权服务器授权 Web 应用程序时,您会立即收到访问令牌基于客户端 ID 和域。与 Client Credentials Grant
相反,您首先收到 Authorization Code
需要交换访问令牌。使用 Implicit Grant
时不能使用 Refresh Tokens
。这意味着用户需要通过授权服务器完成整个流程以获得新的访问令牌。但这并不是什么大问题,因为用户已经使用授权服务器登录,导致立即重定向,因此当在 Web 应用程序中正确实现时,用户不会注意到。
这只是粗略地涵盖了它,它确实帮助了我(我建议你)阅读 OAuth 2.0 spec。希望这对您有所帮助,OAuth 是一个复杂的主题!
我正在尝试使用我的 javascript 客户端应用程序实施 OAuth。 我已经启动了服务器 运行.
我的工作流程如下:
- 打开应用
- 检查令牌是否存在
- 验证令牌
- 如果不存在或无效,请转到 oauth 服务器获取令牌
- 返回应用并重复 2 和 3
- 我一切正常显示我的应用程序
我不确定如何实施第 2 点。我知道我需要为此再次调用服务器,但验证端点在哪里? 我只有 /authorize、/user 和 /logout
还有request应该怎么构成?我是否将令牌附加为 GET 参数,仅此而已? 如果有人拦截有效令牌怎么办?
取决于您的应用程序,但由于您有一个 javascript 网络应用程序,很可能无法对其凭据保密,因此您需要实施 Implicit Grant
OAuth 2.0 规范。但是,如果您的应用程序可以对其凭据保密,则您应该实施 Client Credentials Grant
(服务器端应用程序),因为它更安全。
I am not sure how to implement point 2
您应该将访问令牌存储在 Web 应用程序的某个位置,例如 localStorage
。
用户第一次访问您的 Web 应用程序时,该用户将没有访问令牌,也没有与您的授权服务器的会话。您的 Web 应用程序可以通过执行以下操作来查看您是否拥有访问令牌:
if (!localStorage.getItem('accessToken') {
window.location.replace('https://your-authorization-server/authorize?response_type=token&client_id=<CLIENT_ID>&redirect_uri=<CALLBACK_URL>&scope=<SCOPE>');
}
如果没有访问令牌,您需要重定向到您的授权服务器,以便用户可以使用授权服务器登录。用户登录后,授权服务器将使用有效的访问令牌将用户重定向回您的 Web 应用程序(在用户已授予您的 Web 应用程序希望代表该用户访问的任何资源的权限之后)。此访问令牌必须作为名为 access_token
的哈希片段公开,即:
https://web-app.com#access_token=123456789X
现在您的 Web 应用程序可以提取访问令牌并将其存储在某处。
I understand that I need to make another call to the server for this but where is the validation endpoint? I only have /authorize, /user and /logout
您的授权服务器需要令牌验证端点。您的 Web 应用程序将使用此端点来验证所述令牌(您存储在某处的令牌,例如 localStorage
)。当使用访问令牌调用此端点并且证明令牌有效时,用户可以继续,否则用户将被重定向到授权服务器。如果用户已经与授权服务器建立了会话,则用户将立即使用新的访问令牌重定向回来,否则用户需要先进行身份验证(登录)。
Also how should the request be formed? Do I attach token as a GET parameter and thats all?
有些发送 GET 请求,访问令牌作为 url 查询参数,其他发送 POST 请求,访问令牌作为请求正文的有效负载。
What if somebody intercepts the valid token?
始终使用 https
并且您的访问令牌应在有限的时间内有效。
需要记住的一点是,由于您的应用程序无法对其凭据保密,因此您需要实施 Implicit Grant
,这意味着当授权服务器授权 Web 应用程序时,您会立即收到访问令牌基于客户端 ID 和域。与 Client Credentials Grant
相反,您首先收到 Authorization Code
需要交换访问令牌。使用 Implicit Grant
时不能使用 Refresh Tokens
。这意味着用户需要通过授权服务器完成整个流程以获得新的访问令牌。但这并不是什么大问题,因为用户已经使用授权服务器登录,导致立即重定向,因此当在 Web 应用程序中正确实现时,用户不会注意到。
这只是粗略地涵盖了它,它确实帮助了我(我建议你)阅读 OAuth 2.0 spec。希望这对您有所帮助,OAuth 是一个复杂的主题!