我使用angular中的angular-oauth2-oidc库通过pkce授权流登录,然后将令牌传递到后端以保护我的自定义api。
spring引导后端充当oauth2资源服务器,并使用令牌保护我的自定义api。
安全配置.java
http.cors().and()
.authorizeRequests().antMatchers("/home").permitAll()
.and()
.authorizeRequests().antMatchers("/actuator/health").permitAll()
.and()
.authorizeRequests().antMatchers("/**").authenticated()
.and()
.oauth2ResourceServer().jwt();
默认情况下,azure ad仅为graph api返回有效的jwt令牌。如果您想对自己的api使用azure ad oidc身份验证,那么您正在处理一个不兼容的提供程序。因此,我在appregistration中创建了一个自定义范围→ 公开api页。然后我在angular客户机发起的授权请求中添加了这个作用域以及默认的openid作用域。
现在我有了这个令牌,它不再包含jwt头中的nonce(我需要这样做来保护我的定制api),我该如何使用这个令牌来获得一个新的令牌?然后按照代表流创建我的graph api调用。
有没有人能指导我正确的方向如何准确地获得第二个访问令牌?
1条答案
按热度按时间oprakyz71#
您需要在api中发送2条消息:
将访问令牌发送到令牌端点,以获取图形访问令牌
将图形访问令牌发送到用户信息终结点
我在nodejs中只有一个示例,尽管消息非常简单,包括带有表单url编码数据的请求和json响应。因此,对于任何java http客户端,您都应该能够非常轻松地做到这一点:
nodejs中的示例代码
带截图的博客文章
allen的示例应该演示如何将其纳入Spring Security 中。