Table of Contents
本記事ではスコープ属性について解説します。
本機能は Authlete 2.0 以降でのみ利用可能になります。
スコープ属性とは、あるスコープに関連づけられる key-value 形式の任意の属性です。
それぞれのスコープに対して複数の属性を関連づけ、認可サーバーにおける認可決定やそ
の他の処理に、それらの属性を活用できます。またいくつかの属性は Authlete があらか
じめ定義しており、システム設定に用いられます。
設定方法
スコープの属性の設定は以下の手順で行います。
設定手順の動画: Scope attributes.mov 5.63 MB
以下にリストアップされた属性は、Authlete では特別な意味を持つものとして定義され ています。
属性のキー | 属性の値 | 説明 |
---|---|---|
access_token.duration | 任意の数値 | スコープ単位でアクセストークンの継続時間を管理したい場合に利用します。詳細は「トークンの有効期間のスコープ単位での制御」をご覧ください。 |
refresh_token.duration | 任意の数値 | スコープ単位でリフレッシュトークンの継続時間を管理したい場合に利用します。詳細は「トークンの有効期間のスコープ単位での制御」をご覧ください。 |
fapi | r | FAPI read-only API プロファイルを有効化したい場合に利用します。詳細は「FAPI の機能を利用する」をご覧ください。 |
fapi | rw | FAPI read-and-write API プロファイルを有効化したい場合に利用します。詳細は「FAPI の機能を利用する」をご覧ください。 |
regex | 任意の正規表現 | スコープ文字列の一部を可変にしたい場合に利用します。詳細は「パラメーター化されたスコープ」の利用」をご覧ください。 |
fapi2 | sp | FAPI 2.0 Security プロファイルを有効化したい場合に利用します。詳細は、「FAPI 2.0 Security Profile における認可コードフロー」をご覧ください。 |
fapi2 | ms-authreq | 認可リクエストに対して FAPI 2.0 Message Signing プロファイルを有効化したい場合に利用します。この属性と (fapi2, ms-authres) の両者を特定のスコープに紐づけることもできます。 |
fapi2 | ms-authres | 認可レスポンスに対して FAPI 2.0 Message Signing プロファイルを有効化したい場合に利用します。この属性と (fapi2, ms-authreq) の両者を特定のスコープに紐づけることもできます。 |
スコープの属性はさまざまな場面で活用可能です。以下の Java による認可サーバーのサ ンプルコードは、クライアントからの認可リクエストを Authlete の /auth/authorization API を 用いて解析し、そのリクエストに含まれるスコープに関連づけられている属性をもとに、 なんらかの処理を行う例です。
// Call Authlete /api/authorization API.
AuthorizationResponse res = callAuthorizationAPI();
// Get scopes contained in the original authorization request.
Scope[] scopes = res.getScopes();
if (scopes == null || scopes.length() == 0) {
return;
}
// Check each scope's attributes.
for (Scope scp in scopes) {
// Get the scope attributes of the scope.
Pair[] attributes = scp.getAttributes();
if (attributes == null || attributes.length() == 0) {
continue;
}
// Check each attributes.
for (Pair attr in attributes) {
// The key of the attribute.
String key = attr.getKey();
// The value of the attirbute.
String value = attr.getValue();
// If the key is the target one.
if ("targetkey".equals(key)) {
// Do something with the value.
doSomething(value);
}
}
}