【问题标题】:OAuth2.0 Access token validation by Resource serverOAuth2.0 资源服务器的访问令牌验证
【发布时间】:2020-09-02 07:50:44
【问题描述】:

我正在尝试在一个基于 Java 的 Web 项目中实现 OAuth2.0 授权框架。 我使用 MS Azure 作为 Resource Owner(R.O) + Auth Server(A.S)。

我还创建了一些自定义范围(即属性)以包含在访问令牌中。

我的问题是 - when client receives access token from Azure AD and forwards it to the Resource Server, how does resource server(RS) validates this access token ? How can RS decode the token and read the "scope".

RS 从未连接到 R.O 或 A.S.

注意。我不想使用 OIDC。我只想通过 OAuth2 实现这一目标

【问题讨论】:

    标签: validation oauth-2.0 token


    【解决方案1】:

    以下是我目前能看到的两个选项:

    1. 客户端发送 RS 预先配置了 client_id 和 client_secret。
      Client_Id 和 client_secret 应由 订阅者注册 APP 时的 Azure AD。当客户端发送 RS 的访问令牌,客户端还包括它从那里收到的“代码” Azure AD(即 Azure AD 的资源所有者)。 RS现在可以触发 带有“代码”+ client_id 的 GET 请求。然后 Azure AD 可以发出 访问令牌返回给 RS。这里RS可以映射校验和并验证 如果访问令牌相同(即已授权)。

    2. 客户端向 RS 发送访问令牌。 RS 使用 base64 对令牌进行解码,并且仅检查到期时间和客户端 ID。 如果到期有效且客户端 ID 相同,则 RS 断定令牌有效。

    1st option seems to be more secured where RS can validate the access token and can also refresh the tokens if required.
    

    【讨论】:

      【解决方案2】:

      我假设您在这里指的令牌是JWT 令牌。解码 JWT 令牌没什么大不了的,因为令牌只是 Base64 编码的。

      但是验证令牌很重要。

      验证令牌的方式有两种(令牌是完整的,中间没有经过调和):

      1. 如果令牌是使用对称算法(HS256,...)签名的,那么 RS 需要与 AS 使用相同的密钥。我想,在你的情况下,这是不可能的。因为您不会随身携带钥匙。
      2. 如果令牌是使用非对称算法(RS256,...)签名的。 AS 将使用“私钥”对令牌进行签名,RS 将使用相应的公钥来验证令牌。

      注意:非对称密钥算法是 RS 验证令牌的 CPU 密集型任务。

      【讨论】:

      • 是的,** jwt** 令牌。使用对称算法解码看起来有点冒险。非对称算法在验证方面看起来更好。您能否说明如何从 Azure AD 中获取 私钥
      • 您需要检查使用哪种算法对令牌进行签名。如果它是非对称的,那么您需要来自签名者的公钥。
      猜你喜欢
      • 2020-12-10
      • 2019-07-12
      • 2023-02-22
      • 2012-08-31
      • 2013-07-12
      • 2012-08-28
      • 2016-02-03
      • 2019-05-27
      相关资源
      最近更新 更多