私は必要なプロジェクトに取り組んでいます。認証するだけでなくトークンの実際の価値を持つことも必要です。Spring Security oAuth 2.0 UAAは自動的にトークン値を取得します
私たちはoAuth2.0 Spring Securityを持つSpring Bootアプリケーションを持っています。問題は、私が呼び出したたびに有効なトークンを与える方法を見つけることができないことです。このとき
、私はJavaでコーディングされたpostメソッドの生を持っていますが、次のような何かをする春のセキュリティの実装がなければならない:
- それが呼び出されたのは初めて、それがために頼みますトークンを格納して格納します。
- トークンが期限切れになっているかどうかをチェックし、トークンの有効期限が切れた場合にのみ新しいトークンを要求します。
どこで見つけることができますか?
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();
}
"authomatically" - あなたが行ったことが好きです:) – radoh
「別のサーバーに送信する必要があります」とはどういう意味ですか?このサーバーから別の保護されたリソースにアクセスしようとしていますか? – raiyan