【问题标题】:Azure Authentication - Access Token returning wrong AUD(00000003-0000-0000-c000-000000000000)Azure 身份验证 - 访问令牌返回错误 AUD(00000003-0000-0000-c000-000000000000)
【发布时间】:2023-01-31 16:14:57
【问题描述】:

我正在尝试通过 OAuth 在 Azure 中使用 API 管理进行身份验证。我已经很好地设置了那件作品。 但是从响应来看,访问令牌中的 aud(00000003-0000-0000-c000-000000000000) 无效。 在 access_token 中获得准确 aud 的任何建议/想法。

【问题讨论】:

  • 从反应应用程序安装 AAD Microsoft 身份验证库。 const config = { auth: { authority: 'login.microsoftonline.com/common', clientId: '<Client ID>', redirectUri: 'localhost:3000/callback' }, cache: { cacheLocation: "localStorage", storeAuthStateInCookie: true } };
  • 不,我没有传递任何范围参数。如果需要,我需要在哪里添加/传递它。
  • 传递了 clientId、authority 和 redirect_uri。请只做那些需要的。
  • 你需要传递一个范围。在“公开 API”中定义一个,然后在进行身份验证时使用它。
  • 创建了一个范围,但是我不确定使用 MSAL 从我的 React 应用程序传递特定范围的位置

标签: reactjs azure azure-active-directory


【解决方案1】:

我尝试在我的环境中重现相同的内容并得到如下结果:

我用相同的方式生成了访问令牌aud和你一样,得到了验证错误:

我同意尤纳斯, 要通过 OAuth 在 Azure 中使用 API 管理进行身份验证,请确保通过范围在生成访问令牌时。

我创建了一个 Azure AD 应用程序,公开 API 并添加范围如下所示:

添加了如下 API 权限:

要解决错误,请确保通过范围作为api://AppID/.default。

https://login.microsoftonline.com/TenantID/oauth2/v2.0/token

client_id:ClientID
client_secret:ClientSecret
scope:api://ee1782a6-a994-4013-a396-XXXXX/.default
grant_type:client_credentials

将生成用于访问 APIM 的有效访问令牌,如下所示:

要使用 MSAL 从 React 应用程序传递特定范围,您可以参考以下示例代码:

auth: { 
authority: "https://login.microsoftonline.com/common",
clientId: "ClientID",
postLogoutRedirectUri: RedirectURI
redirectUri: RedirectURI
validateAuthority: true,
navigateToLoginRequestUrl: true,
},
cache:
{ cacheLocation: 'sessionStorage',
storeAuthStateInCookie: true,
},
},
{
scopes: ['api://clientid/.default']
},
LoginType.Redirect

参考:

OAuth 2.0 Authorisation with the Client Credentials Flow on Azure API Management by Paco de la Cruz

Connect React App with Azure AD using react msal by Ray

【讨论】:

    【解决方案2】:

    你弄错了价值观。

    TL;DR:忽略“访问令牌”,获取并读取“id 令牌”并验证“aud”字段是您的客户端 ID。

    首先,您可能会获得一个一次性访问代码(可能类似于 0.ABC)。您可以选择获取开放 ID 令牌。 “范围”必须包括“openid”

    然后,您可以使用一次性代码获取实际的开放 ID 令牌。 “scope”必须再次是“openid”。响应可能包括:

    • 访问令牌 - 可以是任何内容,包括随机字符数、字符串、您的完整详细信息或 JWT;我相信微软返回的 JWT 是针对“00000003-0000-0000-c000-000000000000”观众的(意思是“只有 00000003-0000-0000-c000-000000000000 可以使用它 - 如果你不是那个,请忽略”)
    • id 令牌 - 这是一个 JWT,应在“aud”字段中包含您的应用程序 ID(客户端 ID)

    始终检查“aud”,因为这表明令牌是为谁创建的。如果不是您 - 令牌不适合您。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2022-08-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-10-23
      • 1970-01-01
      相关资源
      最近更新 更多