2017-10-17 11 views
0

私は必要なプロジェクトに取り組んでいます。認証するだけでなくトークンの実際の価値を持つことも必要です。Spring Security oAuth 2.0 UAAは自動的にトークン値を取得します

私たちはoAuth2.0 Spring Securityを持つSpring Bootアプリケーションを持っています。問題は、私が呼び出したたびに有効なトークンを与える方法を見つけることができないことです。このとき

、私はJavaでコーディングされたpostメソッドの生を持っていますが、次のような何かをする春のセキュリティの実装がなければならない:

  1. それが呼び出されたのは初めて、それがために頼みますトークンを格納して格納します。
  2. トークンが期限切れになっているかどうかをチェックし、トークンの有効期限が切れた場合にのみ新しいトークンを要求します。

どこで見つけることができますか?

EDIT私のプロジェクトでは2つの異なる春のインスタンスがある

:認証サーバ - クラウドファウンドリーUAAサーバである - とリソースサーバ - トークンを要求し、コード化されたものです私によって。

AuthorizationServerはAuthorizationServerTokenServicesをJWTバージョンで使用します。リソースサーバーがそこからトークンを取得すると、別のサーバーに送信する必要があるため、デコードして使用するだけでなく、保持する必要があります。

さらに、私のアプリケーションはWebアプリケーションではないため、Facebookにログインするためのログインページはなく、クライアント証明書グラントタイプを使用してトークンを取得する必要があります。

私の場合は、デコードされていないためにシングルサインオンを使用できないため、シングルサインオンができません。

これは私の現在の実装である:私が見たものから、

public String obtainAccessToken() throws ClientProtocolException, IOException { 
     HttpClient httpclient = HttpClients.createDefault(); 

     String userPass64 = new String("User and password"); 

     HttpPost httppost = new HttpPost("localhost:8080/uaa/oauth/token?grant_type=client_credentials");  
     httppost.setHeader("Content-Type", "application/x-www-form-urlencoded"); 
     httppost.setHeader("Authorization", "Basic " + userPass64); 

     //Execute and get the response. 
     HttpResponse response = httpclient.execute(httppost); 
     String responseBody = EntityUtils.toString(response.getEntity()); 

     ObjectMapper mapper = new ObjectMapper(); 
     TokenMessage tokenMessage = mapper.readValue(responseBody, TokenMessage.class); 

     return tokenMessage.getAccess_token(); 
    } 
+0

"authomatically" - あなたが行ったことが好きです:) – radoh

+0

「別のサーバーに送信する必要があります」とはどういう意味ですか?このサーバーから別の保護されたリソースにアクセスしようとしていますか? – raiyan

答えて

0

は春のセキュリティはこれを扱うことができ、いくつかの異なる方法があるということです。インタフェースはそれを扱う

デフォルトの方法は、AuthorizationServerTokenServicesを持つことです。そしてそれを使って、トークンを格納する方法を変えることができます。たとえば、JDBCTokenStore,InMemoryTokenStoreおよびJwtTokenStoreです。これについての詳細:http://projects.spring.io/spring-security-oauth/docs/oauth2.html#managing-tokens

しかし、どのような種類のアプリケーションを作成しているのかわからないので、単一のサインオン機能を開発して、たとえばFacebookに認証トークンを処理させることができます。 https://spring.io/guides/tutorials/spring-boot-oauth2/

+0

ご連絡ありがとうございました。 私は正しく説明しませんでした。私は、リソースサーバとは別の認可サーバ(AクラウドファウンドリUAA)を持っているアーキテクチャを持っています。 AuthorizationServerTokenServicesはAuthorizationサーバーに関連していますが、リソースサーバーにも格納します。 私のアプリケーションの問題は、Webアプリケーションではないため、Facebookにログインするためのログインページがなく、クライアントクレデンシャルグラントタイプを使用してトークンを取得する必要があることです。したがって、シングルサインオンは私が考えることはできません。 – BigEndian32

関連する問題