2015-09-16 15 views
5

私はクライアント認証のためにOAuth2サーバーとしてAzure ADを使用するSpring-BOOTベースのRESTサービスを実装しようとしています。Azure Active DirectoryをSpringブートRESTサービスのOAUTH2認証サービスとして使用する

  1. モバイルネイティブアプリのバックエンドとして私のサービスのためのクライアントとして
  2. 休憩サービスを使用している:

    は、私は2つのapplicatonsを登録しました。

バックエンドアプリケーションに対するすべてのリクエストは、OAuth2フローを使用してAzure AD によって認証される必要があります。私はカール使用しているモバイルアプリの実装として

:ベアラトークンを得るため

を私が$ USER_NAMEと$ PASSWORDは、AzureのADユーザーのcredetialsある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 

、$を使用RESOURCE_IDは自分のRESTサービスのSIDで、$ CLIENT_IDはRESTサーバーのモバイルクライアントのSIDです。

Azureはトークンデータを含むJSONを正常に返します。

@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(); 
    } 
} 

マイRESTコントローラ:バックエンドアプリケーションのための

私のOAuth2 Configが

@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()); 
    } 
} 

しかし、私は、エンドポイントのリストには私のRESTサービスで使用できる任意のURLを見つけられませんでしたベアラトークンをチェックし、Azure ADからユーザデータを取得する。 また、理解しているとおり、Azure ADを使用するためのRESTサービスの資格証明が必要です

どのようにして必要な値を見つけることができますか、間違っていますか?

+0

サンプルにJavaコードがありますか? –

+1

@ShaunLuttinはい、それはJavaコード – Serg

+0

です。この文書は、https://azure.microsoft.com/en-us/documentation/articles/active-directory-authentication-scenarios/ –

答えて

4

最後に私は答えを得ました。

Azure ADは認可にJWTトークンを使用しているため、サーバー上のトークンをチェックする代わりに、このタイプのトークンで作業を実装する必要があります。

+3

のコードの実装を共有してくださいこのため。 –

+0

いくつかのコードを表示できますか?私はAzure ADを使わずに、そのようなソリューションを実装しようとしていますが、JWTの部分は同じでなければならないと思います – Teo