文档首页/ 智能体身份/ API参考/ 应用示例/ 配置Agent身份并获取访问令牌
更新时间:2026-11-04 GMT+08:00
分享

配置Agent身份并获取访问令牌

场景描述

在企业办公自动化场景中,AI Agent需要访问员工的Microsoft数据,以便自动处理邮件分类、文件整理等任务,这涉及到复杂的OAuth 2.0授权流程。

本示例展示如何通过AgentIdentity简化Agent访问Microsoft的开发复杂度,让开发者无需关心OAuth 2.0的底层细节。

总体思路

1. 为Agent创建工作负载身份。

2. 配置Microsoft OAuth2凭证。

3. 获取工作负载访问令牌。

4. 获取Microsoft访问令牌。

涉及的接口如下:

步骤1:创建工作负载身份

URI:POST /v1/workload-identities

API文档详情请参见:创建工作负载身份

  • 请求示例:
    POST https://{endpoint}/v1/workload-identities
    
    {
      "name": "my_workload_identity",
      "allowed_resource_oauth2_return_urls": [
        "https://example.com/oauth2/callback"
      ],
      "authorizer_type": "CUSTOM_JWT",
      "authorizer_configuration": {
        "custom_jwt": {
          "discovery_url": "https://example.com/.well-known/openid-configuration",
          "allowed_audience": ["example-audience"],
          "allowed_clients": ["example-client-id"],
          "allowed_scopes": ["read","write"],
          "custom_claims": [
            {
              "inbound_token_claim_name": "tenant",
              "inbound_token_claim_value_type": "STRING",
              "authorizing_claim_match_value": {
                "claim_match_operator": "EQUALS",
                "claim_match_value": {"match_value_string": "acme"}
              }
            }
          ]
        }
      }
    }
  • 响应示例:
    {
      "workload_identity": {
        "workload_identity_id": "684a2c3e5f1b9d0e7a3c4f56",
        "name": "my_workload_identity",
        "urn": "agentIdentity:<region>:<account-id>:workloadIdentity:workloadIdentityDirectory/<workload-directory-id>/<workload-identity-name>",
        "authorizer_type": "CUSTOM_JWT",
        "api_key_secret": null,
        "allowed_resource_oauth2_return_urls": [
          "https://example.com/oauth2/callback"
        ],
        "created_by": {"type": "SERVICE","identifier": "service.AgentRuntime"},
        "created_at": "2025-12-01T08:00:00Z",
        "updated_at": "2025-12-01T08:00:00Z",
        "tags": null
      }
    }

步骤2:创建Microsoft OAuth2凭证提供商

URI:POST /v1/oauth2-credential-providers

API文档详情请参见:创建OAuth2凭证提供商

  • 请求示例:
    POST https://{endpoint}/v1/oauth2-credential-providers
    
    {
      "name": "my_microsoft_oauthprovider",
      "credential_provider_vendor": "MicrosoftOauth2",
      "oauth2_provider_config_input": {
        "microsoft_oauth2_provider_config": {
          "client_id": "285634f5-5958-4f36-b171-168305215bce",
          "client_secret": "28365081388-oovo6094eg8opo187jn0mstj8s2cevku",
          "tenant_id": "285634f5-5958-4f36-b171-168305215bce"
        }
      }
    }
  • 响应示例:
    {
      "credential_provider": {
        "credential_provider_id": "684a2c3e5f1b9d0e7a3c4f56",
        "name": "my_microsoft_oauthprovider",
        "urn": "agentIdentity:<region>:<account-id>:oauth2CredentialProvider:tokenVault/<token-vault-id>/<name>",
        "credential_provider_vendor": "MicrosoftOauth2",
        "client_secret": {
          "secret_id": "285624f5-5958-4f36-b171-168303615bce",
          "secret_name": "test-secret"
        },
        "callback_url": "https://agent-identity.cn-north-4.myhuaweicloud.com/v1/oauth2/callback/9c38be75-5973-4709-a211-7e2c438c250d",
        "created_at": "2025-12-01T08:00:00Z",
        "updated_at": "2025-12-01T08:00:00Z",
        "oauth2_provider_config_output": {
          "microsoft_oauth2_provider_config": {
            "oauth2_discovery": {
              "discovery_url": "https://login.microsoftonline.com/common/v2.0/.well-known/openid-configuration",
              "authorization_server_metadata": null
            },
            "client_id": "285624f5-5958-4f36-b171-168303615bce"
          },
          "google_oauth2_provider_config": null,
          "github_oauth2_provider_config": null,
          "custom_oauth2_provider_config": null
        },
        "tags": null
      }
    }

注:需在 Microsoft Entra ID 中完成配置,将回调地址添加为应用的 Redirect URI。

步骤3:获取工作负载访问令牌

URI:POST /v1/workload-access-token-for-user-id

API文档详情请参见:使用用户ID创建工作负载访问令牌(以用户身份操作)

  • 请求示例:
     POST https://{endpoint}/v1/workload-access-token-for-user-id
    
    {
      "workload_name" : "my_workload_identity",
      "user_id" : "user-12345"
    }
  • 响应示例:
    {
      "workload_access_token": "eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCJ9...",
      "expiration": "2025-12-31T23:59:59Z"
    }

在三种获取工作负载访问令牌的方法中,/v1/workload-access-token(不带用户)签出的WAT不能用于USER_FEDERATION流程;USER_FEDERATION必须使用-for-user-id或-for-jwt。

步骤4:获取Microsoft访问令牌

URI:POST /v1/oauth2/token

API文档详情请参见:从资源凭证提供商处获取OAuth 2.0令牌

  • 请求示例:
     POST https://{endpoint}/v1/oauth2/token
    
    {
      "custom_state": "string",
      "force_authentication": false,
      "oauth2_flow": "USER_FEDERATION",
      "resource_credential_provider_name": "my_microsoft_oauthprovider",
      "scopes": ["openid", "email", "profile"],
      "workload_access_token": "eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCJ9..."
    }
  • 响应示例(首次调用,USER_FEDERATION):
    {
      "authorization_url": "https://{endpoint}/v1/oauth2/authorize?request_uri=urn%3Aietf%3Aparams%3Aoauth%3Arequest_uri%3A8f14e45f...",
      "session_status": "IN_PROGRESS",
      "session_uri": "urn:ietf:params:oauth:request_uri:abc123"
    }

Agent 收到首次响应后,将 authorization_url 提供给最终用户,用户在浏览器中打开该链接,登录 Microsoft 账号并同意授权。授权完成后,系统自动完成令牌交换。Agent 携带首次返回的 session_uri 和相同的工作负载访问令牌轮询本接口,待 session_status 变为 SUCCEEDED 后,即可获取 access_token。

  • 请求示例(授权后调用,USER_FEDERATION):
     POST https://{endpoint}/v1/oauth2/token 
    
    {
       "custom_state": "string",
       "force_authentication": false,
       "oauth2_flow": "USER_FEDERATION",
       "resource_credential_provider_name": "my_microsoft_oauthprovider",
       "workload_access_token": "eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCJ9...",
       "session_uri": "urn:ietf:params:oauth:request_uri:abc123"
    }
  • 响应示例(用户已完成授权):
    {
       "session_uri": "urn:ietf:params:oauth:request_uri:abc123",
       "access_token": "eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCJ9...",
       "expires_at": "2025-12-31T23:59:59Z"
    }
可根据session_status判断流程状态:IN_PROGRESS表示等待用户授权,可间隔数秒后重新轮询;SUCCEEDED表示授权完成,使用access_token访问Microsoft服务;FAILED表示授权失败(如用户取消授权),需重新发起。Agent获取到访问令牌后,可在令牌有效期内使用该令牌访问Microsoft服务,例如调用 Microsoft Graph 查询邮件:
GET https://graph.microsoft.com/v1.0/me/messages 
Authorization: Bearer <access_token>

相关文档