OAuth 2中的一些困难:我应该保存授权代码还是只访问令牌?

时间:2013-11-06 14:25:13

标签: c# .net authentication oauth oauth-2.0

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

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

我应该在每次请求时发送访问令牌。要在第一次将用户发送到网站时获取此访问令牌,登录后我会收到authorization code。然后我发送此authorization code和我的client_id以及client_secret以获取access token并完成。

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

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

2 个答案:

答案 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