Ser*_*erg 5 java rest spring azure
我正在尝试实现基于Spring-boot的REST服务,该服务应该使用Azure AD作为OAuth2服务器进行客户端身份验证.
我注册了两个应用程序:
应通过Azure AD使用OAuth2流对所有对后端应用程序的请求进行身份验证.
作为移动应用程序的一个实现我使用curl:
要获得Bearer令牌,请使用https://login.microsoftonline.com/TENANT_ID/oauth2/token
curl -s -X POST https://login.microsoftonline.com/<TENANT_ID>/oauth2/token -d grant_type=password -d username=$USER_NAME -d password=$PASSWORD -d resource=$RESOURCE_ID -d client_id=$CLIENT_ID
Run Code Online (Sandbox Code Playgroud)
其中$ USER_NAME和$ PASSWORD是Azure AD用户的凭据,$ RESOURCE_ID是我的REST服务的SID,$ CLIENT_ID是我的移动客户端的REST服务的SID.
Azure使用令牌数据成功返回JSON.
我的Oauth2配置后端应用程序:
@Configuration
@EnableResourceServer
public class OAuth2Config extends ResourceServerConfigurerAdapter {
@Bean
ResourceServerTokenServices resourceTokenServices() {
RemoteTokenServices tokenServices = new RemoteTokenServices();
tokenServices.setClientId(resourceId);
tokenServices.setClientSecret(/*I do not have it*/resourcePassword);
tokenServices.setCheckTokenEndpointUrl(/*I do not have it*/checkToken);
return tokenServices;
}
@Override
public void configure(ResourceServerSecurityConfigurer resources) throws Exception {
resources.tokenServices(resourceTokenServices());
resources.resourceId("rest_api");
}
@Override
public void configure(HttpSecurity http) throws Exception {
http.authorizeRequests().antMatchers("/**").authenticated();
}
}
Run Code Online (Sandbox Code Playgroud)
我的REST控制器:
@RestController
@RequestMapping("/data")
public class CustomerRestController {
@RequestMapping(method = RequestMethod.GET)
public SomeData getMyData(Principal principal){
System.out.println("RESOURCE WAS REQUESTED BY " + principal.getName());
return new SomeData(principal.getName());
}
}
Run Code Online (Sandbox Code Playgroud)
但我没有在端点列表中找到我的REST服务可用于检查持票人令牌和从Azure AD获取用户数据的任何URL.此外,据我所知,它应该为我的REST服务提供某种凭据以使用Azure AD
我怎样才能找到所需的值或者我走错了路?
| 归档时间: |
|
| 查看次数: |
3311 次 |
| 最近记录: |