Spring Boot(v2.1.6)Microsoft Planner集成

时间:2019-07-15 20:51:38

标签: spring-boot azure-active-directory microsoft-graph

我正在开发一个Spring Boot服务,该服务集成了Microsoft Planner的Web API。我已经在Azure中创建了一个应用程序注册,并为Groups.Read.All和Users.Read.All(已委派)授予了权限。

我目前正在尝试实现的是服务器端oauth身份验证。到目前为止,我正在使用的authorization-grant-typeclient_credentials。使用下面的WebSecurityConfiguration,我可以向创建的名为/test的端点发出请求。端点是一个带有参数GET的{​​{1}}请求。

@RegisteredOAuth2AuthorizedClient("azure") OAuth2AuthorizedClient authorizedClient

这样,当发出请求时,Spring将向Microsoft的OAuth端点发出必要的请求以获取访问令牌。

使用此令牌向Microsoft Planner API端点发出请求(带有邮递员)时,import org.springframework.beans.factory.annotation.Autowired; import org.springframework.context.annotation.Configuration; import org.springframework.security.config.annotation.web.builders.HttpSecurity; import org.springframework.security.config.annotation.web.configuration.EnableWebSecurity; import org.springframework.security.config.annotation.web.configuration.WebSecurityConfigurerAdapter; import org.springframework.security.oauth2.client.oidc.userinfo.OidcUserRequest; import org.springframework.security.oauth2.client.userinfo.OAuth2UserService; import org.springframework.security.oauth2.core.oidc.user.OidcUser; @EnableWebSecurity public class WebSecurityConfiguration { @Configuration public class AzureSecurityConfiguration extends WebSecurityConfigurerAdapter { private OAuth2UserService<OidcUserRequest, OidcUser> oAuth2UserService; @Autowired public AzureSecurityConfiguration(OAuth2UserService<OidcUserRequest, OidcUser> oAuth2UserService) { this.oAuth2UserService = oAuth2UserService; } @Override protected void configure(HttpSecurity http) throws Exception { http.authorizeRequests().anyRequest().permitAll().and() .csrf().csrfTokenRepository(CookieCsrfTokenRepository.withHttpOnlyFalse()).and() .addFilterBefore(authenticationFilter, UsernamePasswordAuthenticationFilter.class); } } } 我收到以下响应:

https://graph.microsoft.com/v1.0/users/{username}/planner/tasks

可以理解的范围是{ "error": { "code": "UnknownError", "message": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Strict//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd\">\r\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\r\n<head>\r\n<meta http-equiv=\"Content-Type\" content=\"text/html; charset=iso-8859-1\"/>\r\n<title>401 - Unauthorized: Access is denied due to invalid credentials.</title>\r\n<style type=\"text/css\">\r\n<!--\r\nbody{margin:0;font-size:.7em;font-family:Verdana, Arial, Helvetica, sans-serif;background:#EEEEEE;}\r\nfieldset{padding:0 15px 10px 15px;} \r\nh1{font-size:2.4em;margin:0;color:#FFF;}\r\nh2{font-size:1.7em;margin:0;color:#CC0000;} \r\nh3{font-size:1.2em;margin:10px 0 0 0;color:#000000;} \r\n#header{width:96%;margin:0 0 0 0;padding:6px 2% 6px 2%;font-family:\"trebuchet MS\", Verdana, sans-serif;color:#FFF;\r\nbackground-color:#555555;}\r\n#content{margin:0 0 0 2%;position:relative;}\r\n.content-container{background:#FFF;width:96%;margin-top:8px;padding:10px;position:relative;}\r\n-->\r\n</style>\r\n</head>\r\n<body>\r\n<div id=\"header\"><h1>Server Error</h1></div>\r\n<div id=\"content\">\r\n <div class=\"content-container\"><fieldset>\r\n <h2>401 - Unauthorized: Access is denied due to invalid credentials.</h2>\r\n <h3>You do not have permission to view this directory or page using the credentials that you supplied.</h3>\r\n </fieldset></div>\r\n</div>\r\n</body>\r\n</html>\r\n", "innerError": { "request-id": "some randomly generated id", "date": "time stamp of request" } } } 。此时,我确定这是可行的,但是在将范围定义为https://graph.microsoft.com/.defaulthttps://graph.microsoft.com/users.read.all时不起作用,并给我一个错误,指出为输入参数提供的值无效。 / p>

Groups.Read.All和Users.Read.All是我为Azure中的应用程序注册授予的API权限,所以我不确定为什么失败。

我的最终目标是项目是利用Microsoft的Graph API为给定用户创建,删除,更新MS Planner任务。我希望该服务可以登录用户,而无需用户手动登录Office360。将其与用户无缝连接将非常好。

任何帮助将不胜感激。

侧面注意:我已经通过azure github浏览了它们提供的示例,它们在一定程度上有所帮助。

更新: 我注意到,在包含访问令牌的JSON中,有一个名为https://graph.microsoft.com/users.read.all的属性,将其设置为principalName。我在想这就是为什么访问令牌没有权限向"anonymousUser"发出请求的原因。

以前有没有人看过这个,有没有办法将https://graph.microsoft.com/v1.0/{user.name}/planner/tasks设置为实际的用户名?

0 个答案:

没有答案