OAuth2.0访问令牌由资源服务器验证



我正在尝试在一个基于java的web项目中实现OAuth2.0授权框架。我使用微软Azure作为资源所有者(R.O(+身份验证服务器(A.S(。

我还创建了一些要包含在Access令牌中的自定义作用域(即属性(。

我的问题是-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 实现这一点

我假设您所指的令牌是JWT令牌。解码JWT令牌并不是什么大事,因为该令牌只是Base64编码的。

但是验证令牌很重要。

有两种方法可以验证令牌(令牌是完整的,不会在两者之间进行调和(:

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

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

到目前为止,我可以看到以下两个选项:

  1. 客户端发送的RS预先配置有Client_id和Client_secret
    Client_Id和Client_secret应由订阅服务器注册应用程序时的Azure AD。当客户端发送对RS的访问令牌;代码";它接收自Azure AD(即资源所有者,即Azure AD(。RS现在可以触发GET请求;代码"+client_id。然后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.

最新更新