3

注意:这不是关于编码,而是关于方法本身。

我正在为使用 OAuth 2 的网站创建客户端。由于这是我第一次使用 oauth 2,我在理解该方法时遇到了一些问题。据我所知:

我应该在每个请求中发送我的访问令牌。为了在第一次将用户发送到网站时获取此访问令牌,登录后我得到一个authorization code. 然后我发送这个authorization code和我的client_idclient_secretaccess token完成。

直到这里一切都很好。但是在接下来的应用程序执行中,我不知道该怎么办。我不想每次都要求用户登录。但是我怎么知道我的访问令牌仍然有效?我应该保存我的授权代码并再次请求新的访问令牌吗?

我请求一个未过期的访问令牌,但要刷新访问令牌,我应该发送一些refresh_token?这是什么?我应该这样发送旧的访问令牌吗?

4

2 回答 2

7

@Eugenio 的回答是正确的。

回答您的具体问题

但是我怎么知道我的访问令牌仍然有效? 访问令牌带有一个过期时间,通常是一小时。另一种方法是尝试使用它并在过期时捕获 401 状态。

我应该保存我的授权代码并再次请求新的访问令牌吗? 不可以。授权码只能使用一次。您可以请求刷新令牌,保存它,然后使用它来获取后续访问令牌,或者您可以重复授权过程,这取决于提供者,可能需要也可能不需要用户参与,因为提供者会知道用户之前已授权您的应用。

我请求一个未过期的访问令牌,但要刷新访问令牌,我应该发送一些 refresh_token? 不存在未过期的访问令牌之类的东西。您使用刷新令牌来获取新的访问令牌。

这是什么[刷新令牌]? 这是一个字符串,您的应用程序可以将其传递给提供者说“嘿,又是我。记得不久前用户 xxxxx,授予我,应用程序 yyyy(客户端 ID),代表他执行 aaaa 和 bbbb(范围)的权限,即使他不在场。好吧,我现在想做一些,所以请给我一个访问令牌“。

我应该这样发送旧的访问令牌吗? 不,一旦访问令牌过期,它就没有任何用处或意义。

于 2013-11-07T07:52:05.103 回答
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

于 2013-11-07T02:22:15.793 回答