我正在尝试在一个基于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编码的。
但是验证令牌很重要。
有两种方法可以验证令牌(令牌是完整的,不会在两者之间进行调和(:
- 如果令牌是使用对称算法(HS256,…(签名的,那么RS需要与as使用的密钥相同。我想,在您的情况下,这是不可能的。因为你不会随身携带钥匙
- 如果令牌是使用非对称算法(RS256,…(签名的。AS将使用"私钥"对令牌进行签名,RS将使用相应的公钥来验证令牌
注意:非对称密钥算法是RS验证令牌的CPU密集型任务。
到目前为止,我可以看到以下两个选项:
客户端发送的RS预先配置有Client_id和Client_secret
Client_Id和Client_secret应由订阅服务器注册应用程序时的Azure AD。当客户端发送对RS的访问令牌;代码";它接收自Azure AD(即资源所有者,即Azure AD(。RS现在可以触发GET请求;代码"+client_id。然后Azure AD可以发布访问令牌返回到RS。在这里,RS可以映射校验和并验证如果访问令牌相同(即被授权(。客户端向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.