2017-08-09 19 views
1

私は、Spring Boot Microservices + Angular2アプリケーションにAzure AD OAuth 2.0認証フローを使用しています。私のアプリケーションWeb APIでaccess_token(Azure AD OAuth 2.0)を検証する方法は?

  1. (葉エンドからの私の春のブートアプリケーションへの第一の要求)春ブートアプリケーションの
    流れはAzureのログインページにリダイレクトします。
  2. ユーザーが
  3. 認証サーバがredirect_uriにPOSTリクエストを送信し、彼の資格情報を入力し、この要求は(姓、名、およびユーザーIDなどの)他のユーザーの情報と一緒にauthorization_codeを持っています。
  4. は、その後、私はauthorization_code

を使用してbearerトークンとrefresh_tokenを取得する今、私はbearer_tokenを検証する他のmicroserviceにbearer_tokenを送信したいです。

私の質問は、bearer_tokenを検証し、他のマイクロサービスでそのトークンの所有者を取得する方法です。

答えて

1

JWTでエンコードされたトークンを返すAzure AD OAuth 2.0のデフォルト設定を使用すると仮定します。このタイプのトークンにはメリットはありません。トークン自体から許可されたスコープなどの情報を抽出することができます。また、トークンの署名を確認して認証サーバーに検証要求を送信することを避けることもできます。

設定JWTトークン検証

あなたはJWTトークンを使用して、リソースサーバ(あなたのWeb API)を設定する必要があります:

@Configuration 
@EnableResourceServer 
public class OAuth2ResourceServerConfig extends ResourceServerConfigurerAdapter { 
    @Override 
    public void configure(ResourceServerSecurityConfigurer config) { 
     config.tokenServices(tokenServices()); 
    } 

    @Bean 
    public TokenStore tokenStore() { 
     return new JwtTokenStore(accessTokenConverter()); 
    } 

    @Bean 
    public JwtAccessTokenConverter accessTokenConverter() { 
     JwtAccessTokenConverter converter = new JwtAccessTokenConverter(); 
     converter.setVerifierKey(obtainAzureADPublicKey()); 
     return converter; 
    } 

    @Bean 
    @Primary 
    public DefaultTokenServices tokenServices() { 
     DefaultTokenServices defaultTokenServices = new DefaultTokenServices(); 
     defaultTokenServices.setTokenStore(tokenStore()); 
     return defaultTokenServices; 
    } 
} 

このコード(小さな変更を加えた)の優れたblog postから取られましたEugen Paraschiv(別名Baeldung)

署名アズールの取得キー

のAzure ADが発行されたトークンに署名し、 obtainAzureADPublicKey方法からそれを返すために使用していることをあなたは、非対称公開暗号化キーを取得する必要があります。基づいて

documentationあなたが最初に(結果から "jwks_uri"プロパティの値を取得することにより) https://login.microsoftonline.com/common/.well-known/openid-configurationからJWT署名キーのエンドポイントに関するメタ情報を取得する必要があります。

次に、そのURLから適切なキーを取得する必要があります。

Azure ADはこの情報を時々変更するため、アプリケーションの起動時にこの情報を1回だけ変更することはできません。しかし、少なくとも24時間キャッシュするのは良い考えです。

+0

こんにちは@Oleg、(セキュリティの観点から)それはクッキーに更新トークンとベアラトークンを保存してもよろしいですか? –

1

は、基本的には、アクセストークンを生成したが、通常は認証サーバであることを検証するための責任を負わなければならない、私はアズールがそうそこにあなたがしている任意のHTTPリクエストのために、あなたのトークン

+0

私はどこにいるのですか。 Azure ADからどのように確認できますか? –

0

を検証する必要がありますどこ認証サーバであることを理解しますmicroservicesへの送信には、ヘッダに以下を追加する必要があります

Authorization: Bearer bearer_token 

bearer_tokenは、そのユーザのためにmicroservicesによって与えられたトークンです。

注:microserviceの意味はわかりませんが、ここではWeb APIサービスを想定しています。

+0

はい、マイクロサービスはWeb APIの一種だと言えます。しかし、私の質問は、どのようにマイクロサービス/ Web APIがそのトークンが有効かどうかを判断することができますか?また、そのトークンに関連付けられたユーザーの情報を取得して、何らかの承認を行うことができるはずです。 –

+0

トークンが有効かどうかを検証するためには、 'microservice'(または' Web API Server')にありますが、あなたにはありません。許可エラーが送信された場合、あなたの 'bearer_token'が期限切れであり、' refresh_token'を使って 'bearer_token'をリフレッシュする時間を意味します。これを行う方法は、Web APIサービスとしても提供されています。通常、 'bearer_token'が有効である秒数も提供します。それを使用しようとします。 – ViKiG

関連する問題