【问题标题】:some difficulties in OAuth 2: Should I save authorization code or just access token?OAuth 2 中的一些困难:我应该保存授权代码还是只访问令牌?
【发布时间】:2013-11-17 20:09:20
【问题描述】:

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

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

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

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

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

【问题讨论】:

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


    【解决方案1】:

    @Eugenio 的回答是正确的。

    回答您的具体问题

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

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

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

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

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

    【讨论】:

      【解决方案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

      【讨论】:

        猜你喜欢
        • 2015-02-24
        • 1970-01-01
        • 2011-08-05
        • 2018-09-30
        • 1970-01-01
        • 1970-01-01
        • 2011-11-17
        • 2019-10-11
        • 2023-04-06
        相关资源
        最近更新 更多