Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/364.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何使用符合oidc的令牌在Java中为Graph API获取第二个访问令牌。海外建筑运营管理局流量_Java_Angular_Azure Active Directory_Microsoft Graph Api_Openid Connect - Fatal编程技术网

如何使用符合oidc的令牌在Java中为Graph API获取第二个访问令牌。海外建筑运营管理局流量

如何使用符合oidc的令牌在Java中为Graph API获取第二个访问令牌。海外建筑运营管理局流量,java,angular,azure-active-directory,microsoft-graph-api,openid-connect,Java,Angular,Azure Active Directory,Microsoft Graph Api,Openid Connect,我使用angular中的angular-oauth2-oidc库通过PKCE授权流登录,然后将令牌传递到后端以保护我的自定义API Spring引导后端充当oauth2资源服务器,并使用令牌保护我的自定义API SecurityConfiguration.java http.cors().and() .authorizeRequests().antMatchers("/home").permitAll() .and() .aut

我使用angular中的angular-oauth2-oidc库通过PKCE授权流登录,然后将令牌传递到后端以保护我的自定义API

Spring引导后端充当oauth2资源服务器,并使用令牌保护我的自定义API

SecurityConfiguration.java

http.cors().and()
        .authorizeRequests().antMatchers("/home").permitAll()
        .and()
        .authorizeRequests().antMatchers("/actuator/health").permitAll()
        .and()
        .authorizeRequests().antMatchers("/**").authenticated()
        .and()
        .oauth2ResourceServer().jwt();
默认情况下,Azure AD仅为图形API返回有效的JWT令牌。如果您想对自己的API使用Azure AD OIDC身份验证,则需要与不兼容的提供商打交道。 因此,我在应用程序注册中创建了一个自定义范围→ 公开API页面。然后,我在Angular客户机发起的授权请求中添加了这个范围以及默认的openid范围

现在我有了这个令牌,它不再在jwt头中包含“nonce”(我需要这样做来保护我的定制api),我如何使用这个令牌来获取新令牌? 然后按照代表流创建我的图形api调用


是否有人能指导我正确地获取第二个访问令牌?

您需要在API中发送两条消息:

  • 将访问令牌发送到令牌端点,以获取图形访问令牌
  • 将图形访问令牌发送到用户信息端点
我在NodeJS中只有一个示例,尽管消息非常简单,包括带有表单url编码数据的请求和JSON响应。因此,对于任何Java HTTP客户端,您都应该能够相当轻松地做到这一点:


Allen的示例应该演示如何将其纳入Spring Security。

您看到了吗
&assertion=eyJ0eXAiOiJKV***
是第一个令牌。您需要将其包含在获取第二个访问令牌的请求中。抱歉,我可能缺少一些内容。在Java中如何使用它?请参阅示例代码:use
msalAuthHelper.getOboToken(“https://graph.microsoft.com/.default)
。我之前已经向您提供了一份完整的。在实现它时有什么困难吗?谢谢,我找到了一个关于如何用Java创建POST请求的线程,并得到了正确的响应。解析JSON响应以仅检索新的访问令牌是另一个问题,但我终于让它工作起来了。