すべてのプロダクト
Search
ドキュメントセンター

Resource Access Management:OIDC を使用したユーザー情報の取得

最終更新日:Jun 04, 2026

OpenID Connect (OIDC) は OAuth 2.0 上に構築された ID レイヤーです。ご利用のアプリケーションは OIDC を使用して、Alibaba Cloud にサインインするユーザーに関する情報を取得できます。

前提条件

以下のタスクを完了している必要があります:アプリケーションの作成OAuth スコープの管理、および クライアントシークレットの作成

基本概念

概念

説明

ID トークン

OIDC は、サインイン済みユーザーを表す ID トークンを発行します。このトークンには、表示名やログイン名などのユーザー情報が含まれますが、Alibaba Cloud サービスへのアクセスはできません。

OIDC ディスカバリーエンドポイント

OIDC プロトコルでは複数のエンドポイントが定義されています。ディスカバリーエンドポイントにはすべての OIDC 構成が含まれており、開発者が統合を簡素化できます。

説明

ディスカバリーエンドポイントは、プロバイダーメタデータを含む JSON ドキュメントを返します。これには、サポートされるレスポンスタイプ、Issuer 値、ID トークンの署名検証用公開鍵 URL、およびサポートされる署名アルゴリズムが含まれます。

Alibaba Cloud OIDC ディスカバリーエンドポイント:https://oauth.alibabacloud.com/.well-known/openid-configuration

ディスカバリーエンドポイントからの応答例:

{
  "code_challenge_methods_supported": [
    "plain",
    "S256"
  ],
  "subject_types_supported": [
    "public"
  ],
  "response_types_supported": [
    "code"
  ],
  "issuer": "https://oauth.alibabacloud.com",
  "jwks_uri": "https://oauth.alibabacloud.com/v1/keys",
  "revocation_endpoint": "https://oauth.alibabacloud.com/v1/revoke",
  "token_endpoint": "https://oauth.alibabacloud.com/v1/token",
  "id_token_signing_alg_values_supported": [
    "RS256"
  ],
  "scopes_supported": [
    "openid",
    "aliuid",
    "profile"
  ],
  "authorization_endpoint": "https://signin.alibabacloud.com/oauth2/v1/auth"
}

仕組み

OIDC workflow

  1. ユーザーがブラウザからアプリケーションにサインインします。

  2. ご利用のアプリケーションは、ユーザーのブラウザを Alibaba Cloud OIDC サービスにリダイレクトします。

    説明

    ユーザーがまだサインインしていない場合、リクエストはさらに Alibaba Cloud サインインサービスにリダイレクトされます。

  3. ユーザーは Alibaba Cloud にサインインし、ご利用のアプリケーションに権限付与します。

  4. Alibaba Cloud OIDC サービスは、ユーザーのブラウザを認証コード付きでご利用のアプリケーションにリダイレクトします。

  5. ご利用のアプリケーションは、認証コードを Alibaba Cloud OIDC サービスに送信して ID トークンと交換します。

  6. Alibaba Cloud OIDC サービスは、ID トークンとアクセストークンをアプリケーションに返します。その後、アプリケーションは ID トークンまたはアクセストークンのいずれかを使用してユーザー情報を取得できます。

    主な利用シーン:

例 1:署名用公開鍵の取得

リクエスト例:

private List getSignPublicKey() {
  HttpResponse response = HttpClientUtils.doGet("https://oauth.alibabacloud.com/v1/keys");
  List rsaKeyList = new ArrayList();
  if (response.getCode() == 200 && response.isSuccess()) {
    String keys = JSON.parseObject(response.getData()).getString("keys");
    try {
      JSONArray publicKeyList = JSON.parseArray(keys);
      for (Object object : publicKeyList) {
        RSAKey rsaKey = RSAKey.parse(JSONObject.toJSONString(object));
        rsaKeyList.add(rsaKey);
      }
      return rsaKeyList;
    } catch (Exception e) {
      LOG.info(e.getMessage());
    }
  }
  LOG.info("GetSignPublicKey failed:{}", response.getData());
  throw new AuthenticationException(response.getData());
}                    

例 2:JWT 署名の検証

Alibaba Cloud の ID トークンは、JWS 標準で定義されている RS256 署名アルゴリズムを使用して署名された JSON Web トークン (JWT) です。各 ID トークンは以下の項目をチェックして検証します。

  • 署名検証:OAuth サービスの公開鍵 (例 1) を使用して、ID トークンの真正性と整合性を検証します。

    OAuth サービスは定期的に公開鍵をローテーションします。公開鍵を取得する際は、以下の点にご注意ください。

    • リクエストごとに公開鍵を取得してください。長期的なキャッシュは避けてください。

    • キーのローテーション中、サービスは複数の有効な鍵を返す場合があります。署名を検証できる鍵が見つかるまで、各鍵を試してください。鍵の数が固定であるとは仮定しないでください。

    リクエスト例:

    public boolean verifySign(SignedJWT signedJWT) {
      List publicKeyList = getSignPublicKey();
      RSAKey rsaKey = null;
      for (RSAKey key : publicKeyList) {
        if (signedJWT.getHeader().getKeyID().equals(key.getKeyID())) {
          rsaKey = key;
        }
      }
      if (rsaKey != null) {
        try {
          RSASSAVerifier verifier = new RSASSAVerifier(rsaKey.toRSAPublicKey());
          if (signedJWT.verify(verifier)) {
            return true;
          }
        } catch (Exception e) {
          LOG.info("Verify exception:{}", e.getMessage());
        }
      }
      throw new AuthenticationException("Can't verify signature for id token");
    }
  • 有効期間の検証:トークンの発行時刻と有効期限が有効であることを確認します。

  • オーディエンスの検証:aud クレームがご利用のアプリケーションのクライアント ID と一致することを確認します。

例 3:ID トークンの解析

  • 応答パラメーター

    • ヘッダークレーム

      パラメーター

      説明

      OAuth スコープ

      alg

      署名アルゴリズム。

      openid

      kid

      トークンの署名に使用された公開鍵の ID。このキーを使用して署名を検証し、改ざんを防止します。

      openid

    • ボディクレーム

      パラメーター

      説明

      OAuth スコープ

      exp

      トークンの有効期限を示すタイムスタンプ。

      openid

      sub

      サインイン済みユーザーの一意かつ安定した識別子。Alibaba Cloud UID やユーザー名などの情報は含まれません。

      説明

      サインイン済みユーザーが RAM ロールの場合、sub クレームは <RoleId:RoleSessionName> から生成されます。各ロールセッションには独自の sub 値があります。

      openid

      aud

      トークンのオーディエンス。ご利用のアプリケーションのクライアント ID です。

      openid

      iss

      トークンの発行元。値は https://oauth.alibabacloud.com です。

      openid

      iat

      トークンが発行された時刻を示すタイムスタンプ。

      openid

      type

      サインイン済みユーザーのタイプ。有効な値:

      • account:Alibaba Cloud アカウント (プライマリアカウント)。

      • user:RAM ユーザー。

      • role:RAM ロール。

      profile

      name

      サインイン済みユーザーの表示名。有効な値:

      • RAM ユーザーの場合:RAM ユーザーの表示名。

      • RAM ロールの場合:<RoleName:RoleSessionName>

      説明

      このクレームは、RAM ユーザーまたは RAM ロールの場合にのみ返されます。

      profile

      upn

      RAM ユーザーのログイン名。

      説明

      このクレームは、RAM ユーザーの場合にのみ返されます。

      profile

      login_name

      Alibaba Cloud アカウント (プライマリアカウント) のログイン名。

      説明

      このクレームは、Alibaba Cloud アカウント (プライマリアカウント) の場合にのみ返されます。

      profile

      aid

      ユーザーが所属する Alibaba Cloud アカウントの ID。

      aliuid

      uid

      サインイン済みユーザーの ID。有効な値:

      • Alibaba Cloud アカウント (プライマリアカウント) の場合:Alibaba Cloud アカウント ID。aid 値と同じです。

      • RAM ユーザーの場合:RAM ユーザー ID。

      • RAM ロールの場合:RAM ロール ID。

      aliuid

  • 応答例

    • ヘッダー例

      {
        "alg": "RS256",
        "kid": "JC9wxzrhqJ0gtaCEt2QLUfevEUIwltFhui4O1bh****"
      }
    • 本文例

      これらの例は、デコードされた ID トークンのペイロードを示しています。実際のトークンは、検証が必要な単一のエンコード済み JWT 文字列です (例 2:JWT 署名の検証)。

      • Alibaba Cloud アカウント向けのペイロード例

        {
          "exp": 1517539523,
          "sub": "123456789012****",
          "aud": "4567890123456****",
          "iss": "https://oauth.alibabacloud.com",
          "iat": 1517535923,
          "type": "account",
          "login_name":"alice@example.com", // Alibaba Cloud アカウントのログイン名
          "aid": "123456789012****", // Alibaba Cloud アカウントの ID
          "uid": "123456789012****" // Alibaba Cloud アカウントの ID
        }
      • RAM ユーザー向けのペイロード例

        {
          "exp": 1517539523,
          "sub": "123456789012****",
          "aud": "4567890123456****",
          "iss": "https://oauth.alibabacloud.com",
          "iat": 1517535923,
          "type": "user",
          "name": "alice", // RAM ユーザーの表示名
          "upn": "alice@example.onaliyun.com", // RAM ユーザーのログイン名
          "aid": "123456789012****", // RAM ユーザーが所属する Alibaba Cloud アカウントの ID
          "uid": "234567890123****" // RAM ユーザーの ID
        }
      • RAM ロール向けのペイロード例

        {
          "exp": 1517539523,
          "sub": "123456789012****",
          "aud": "4567890123456****",
          "iss": "https://oauth.alibabacloud.com",
          "iat": 1517535923,
          "type": "role",
          "name": "NetworkAdministrator:alice", // RAM ロールの表示名
          "aid": "123456789012****", // RAM ロールが所属する Alibaba Cloud アカウントの ID
          "uid": "300800165472****" // RAM ロールの ID
        }

例 4:UserInfo エンドポイントの使用

アクセストークンを使用して UserInfo エンドポイントを呼び出し、ユーザー情報を取得することもできます。この応答はエンコードされません。

説明

openidaliuid、および profile スコープのみをリクエストした場合でも、アクセストークンが返されます。ただし、このトークンは UserInfo エンドポイント専用にスコープが制限されています。

UserInfo エンドポイントの URL は https://oauth.alibabacloud.com/v1/userinfo です。

リクエスト例:

GET v1/userinfo HTTP/1.1
Host: oauth.alibabacloud.com
Authorization: Bearer SIAV32hkKG

応答パラメーター:

パラメーター

説明

OAuth スコープ

sub

サインイン済みユーザーの一意かつ安定した識別子。Alibaba Cloud UID やユーザー名などの情報は含まれません。

openid

type

サインイン済みユーザーのタイプ。

profile

name

サインイン済みユーザーの表示名。

説明

このパラメーターは、RAM ユーザーまたは RAM ロールの場合にのみ返されます。

profile

upn

RAM ユーザーのログイン名。

説明

このパラメーターは、RAM ユーザーの場合にのみ返されます。

profile

login_name

Alibaba Cloud アカウント (プライマリアカウント) のログイン名。

説明

このパラメーターは、Alibaba Cloud アカウント (プライマリアカウント) の場合にのみ返されます。

profile

aid

ユーザーが所属する Alibaba Cloud アカウントの ID。

aliuid

uid

サインイン済みユーザーの ID。

aliuid

応答例:

  • Alibaba Cloud アカウント向けの応答例

    HTTP/1.1 200 OK
    Content-Type: application/json
    {
      "sub": "123456789012****", 
      "type": "account",
      "login_name":"alice@example.com", // Alibaba Cloud アカウントのログイン名
      "aid": "123456789012****", // Alibaba Cloud アカウントの ID
      "uid": "123456789012****" // Alibaba Cloud アカウントの ID
    }
  • RAM ユーザー向けの応答例

    HTTP/1.1 200 OK
    Content-Type: application/json
    {
      "sub": "123456789012****", 
      "type": "user",  
      "name": "alice", // RAM ユーザーの表示名
      "upn": "alice@example.onaliyun.com", // RAM ユーザーのログイン名
      "aid": "123456789012****", // RAM ユーザーが所属する Alibaba Cloud アカウントの ID
      "uid": "234567890123****" // RAM ユーザーの ID
    }
  • RAM ロール向けの応答例

    HTTP/1.1 200 OK
    Content-Type: application/json
    {
      "sub": "123456789012****", 
      "type": "role",
      "name": "NetworkAdministrator:alice", // RAM ロールの表示名
      "aid": "123456789012****", // RAM ロールが所属する Alibaba Cloud アカウントの ID
      "uid": "300800165472****" // RAM ロールの ID
    }