web-dev-qa-db-ja.com

Keycloak:アクセストークンを検証し、keycloakIDを取得します

私は次のことができる必要があります(プレーンなcURLとJSONサーバーサイド-フレームワークやJavaはありません):

  1. サードパーティから提供されたKeycloakアクセストークンの文字列表現を使用して、トークンが有効であることを確認します。

  2. トークンが有効な場合は、そのユーザーのKeycloakIDを取得します。

プレーンな古いHTTP投稿を使用してこれを行うにはどうすればよいですか?たくさんのJavaの例を見つけましたが、その下にある生のHTTPPOSTと応答を知る必要があります。

トークンを検証するのはこのようなものですか?

/auth/realms/<realm>/protocols/openid-connect/validate?access_token=accesstokenhere

これはデータに関して何を返しますか(申し訳ありませんが、現在、問い合わせるテストサーバーがありません)?

ありがとう。

6
lilalfyalien

検証エンドポイントは現在機能していないようです。以前はアクセストークンを返していました。現在、keycloak2.5.1を使用しています。 Matyasによる投稿(および彼が参照する post )で述べたように、 introspect トークンエンドポイントを使用する必要がありました。

私のテストでは、ベアラー認証は機能しませんでした。 base64でエンコードされたクライアント資格情報とともに基本認証ヘッダーを使用する必要がありました。

base64.encode("<client_id:client_secret>".getBytes("utf-8"))

イントロスペクトエンドポイントからの応答は、Maytasによって参照される投稿で共有されるように、JSON形式であり、イントロスペクトされるトークンのタイプに基づいて多くのフィールドがあります。私の場合、token_type_hintaccess_tokenとして設定されました。

requestParams = "token_type_hint=access_token&token=" + accessToken

応答には、ユーザー名、役割、リソースアクセスなどの必要なユーザーの詳細が含まれていました。 OAuth active、exp、issなどの必須属性も含まれます。詳細については、rfc7662#page-6を参照してください。

3
mssuley

多分これが必要です: http://lists.jboss.org/pipermail/keycloak-user/2016-April/005869.html

唯一の問題は、イントロスペクトがパブリッククライアントと連携していないことです。

キーURLは次のとおりです: "http:// $ KC_SERVER/$ KC_CONTEXT/realms/$ REALM/protocol/openid-connect/token/introspect"

クライアントを承認する必要があります。基本認証を使用し、イントロスペクトにリクエスタートークンを与える必要があります。

curl -u "client_id:client_secret" -d "token=access_token_to_introspect" "http://$KC_SERVER/$KC_CONTEXT/realms/$REALM/protocol/openid-connect/token/introspect"
2
user5963797