问题描述
我正在尝试在一个基于Java的Web项目中实现OAuth2.0授权框架。 我使用MS Azure作为资源所有者(R.O)+身份验证服务器(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来实现这一点
解决方法
以下是到目前为止我可以看到的两个选项:
客户端发送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可以在此处映射校验和并进行验证 如果访问令牌是相同的(即已授权)。客户端将访问令牌发送到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.
,
我假设您所指的令牌是JWT
令牌。解码JWT
令牌并不重要,因为令牌只是Base64编码。
但是验证令牌很重要。
有两种验证令牌的方法(令牌完好无损,之间没有调节):
- 如果使用对称算法(HS256,...)对令牌进行了签名,则与AS所使用的RS相同的密钥必须与RS一起使用。我想,就您而言,这是不可能的。因为您将没有钥匙。
- 如果令牌是使用非对称算法(RS256,...)签名的。 AS将使用“私钥”对令牌进行签名,RS将使用相应的公钥来验证令牌。
注意:非对称密钥算法是RS验证令牌的CPU密集型任务。