注意:这不是关于编码,而是关于方法本身。
我正在为使用OAuth 2的网站建立客户端。由于这是我第一次使用oauth 2,因此我在理解该方法时遇到了一些问题。据我所知,直到现在:
我应该在每次请求时发送访问令牌。要在第一次将用户发送到网站时获取此访问令牌,登录后我会收到authorization code
。然后我发送此authorization code
和我的client_id
以及client_secret
以获取access token
并完成。
我请求一个非过期的访问令牌,但要刷新访问令牌,我应该发送一些refresh_token
?这是什么?我应该发送旧的访问令牌吗?
答案 0 :(得分:6)
@Eugenio的回答是正确的。
回答您的具体问题
但我怎么知道我的访问令牌仍然有效? 访问令牌带有到期时间,通常为一小时。另一种方法是尝试使用它并在它过期时捕获401状态。
我应该保存授权码并再次请求新的访问令牌吗? 不可以。授权码只能使用一次。您可以请求刷新令牌,保存,然后使用它来获取后续访问令牌,或者您可以重复授权过程,这取决于提供商,可能需要或可能不需要用户参与,因为提供商将知道用户之前已经授权您的应用。
我请求一个非过期的访问令牌,但要刷新访问令牌,我应该发送一些refresh_token? 没有非过期访问令牌这样的东西。您使用刷新令牌以获取新的访问令牌。
这是什么[刷新令牌]? 这是一个字符串,你的应用程序可以传递给提供者说“嘿,这是我的。再说一次前用户xxxxx,授予我,应用程序yyyy(客户端ID),代表他做aaaa和bbbb(范围)的权限,即使他不在场。我现在想做一些,所以我可以获得一个访问令牌“。
我应该发送旧的访问令牌吗? 不会。一旦访问令牌过期,它就没有任何用处或意义。
答案 1 :(得分:2)
您从身份验证网站获得的access_token
可以称为他们的 API,而不是您的应用。如果你需要最终在你的应用程序中调用它们,你应该保留它。
例如,如果您的用户使用Facebook进行身份验证,那么您获得的access_token
将会很好地调用Facebook的终端。
OAuth2本质上是一种授权协议:用户授予您代表他们访问其信息的权限。
此过程常用且有用的副作用是将这些用户视为“已通过身份验证”,因为您可能只能从合法用户那里获得access_token
。
然后由您的网站与他们建立会话。如果您自己对用户进行身份验证,可能会在使用代码成功检索access_token
之后执行此操作。 (或者有时在从授权服务器检索用户配置文件之后,另一种常用技术)。
您可以在此处浏览在.NET平台上执行此操作的示例:https://docs.auth0.com/aspnet-tutorial(这已配置为与我们自己的OAuth服务器配合使用,但原则是通用的)。
此示例所依赖的代码可在此处获取:https://github.com/auth0/auth0-aspnet