【问题标题】:Azure active directory - Allowed token audiencesAzure 活动目录 - 允许的令牌受众
【发布时间】:2017-03-07 04:20:34
【问题描述】:

我正在尝试在 Azure 中查找有关“允许的令牌受众”的文档, 但似乎没有。我放在那里的价值 是与令牌一起返回的资源 ID。

这是什么意思?任何文档链接将不胜感激。

附言。实际页面上的学习链接没有提及这一点,并且 屏幕截图似乎较旧且没有此字段。

提前致谢

【问题讨论】:

  • 我一直在手动进行 Azure AD 身份验证,所以我不太确定这一点。 Azure AD 术语中的允许访问群体通常表示“我们认为对此 API 有效的 aud 声明的值”。因此,如果有人调用受 Azure AD 保护的 API,则令牌中的 aud 声明必须与此处定义的声明之一匹配。您可能不应该将 Azure AD Graph 客户端 ID 放在那里 :)
  • ID 看起来像 Azure Graph API 的资源 ID。这意味着,正如@juunas 所说,您的应用程序具有使用该 API 的一些权限。
  • 找到这个,并发表评论询问她编辑了哪些文档:github.com/MicrosoftDocs/azure-docs/issues/12377

标签: azure azure-active-directory


【解决方案1】:

我也一直在研究文档。这是我使用一个使用后端 API 应用程序的 Angular 前端应用程序所做的工作。

在前端应用程序中,用户单击链接并使用 Azure 目录进行身份验证。令牌保存在浏览器的会话中。

接下来,用户想要与 API 应用进行交互。
方法如下:

  • 转到 Azure 中 API 应用的应用服务。
  • 导航到身份验证/授权
  • “开启”应用服务身份验证
  • 在身份验证提供程序下选择“Azure Active Directory”
  • 选择“高级”按钮
  • 在“客户端 ID”字段中,插入 API 应用程序的 Azure Active Directory 应用程序注册中的“应用程序 ID”。您应该已经在 Azure Active Directory 中注册了 API 应用。
  • 在“允许的令牌受众”字段中,插入前端应用程序的 Azure Active Directory 应用程序注册中的“应用程序 ID”。您应该已经在 Azure Active Directory 中注册了前端应用。

安全非常重要。让我大吃一惊的是,文档围绕这些东西是多么令人困惑。 Owin/Katana 看起来快要出路了。基于此配置,您将不需要任何配置。 Owin 已过时的另一个迹象是与 Microsoft/System IdentityModel 相关的巨大突破性变化,这似乎是不可能构建、识别、修复、yada yada。我希望微软能创建一个“端点”来显示出什么在里面,以及如何做这个特定的步骤。如果您可以让您的应用程序执行此操作,那么它真的很干净。

【讨论】:

  • 由于某种原因,我不断收到“您无权查看此目录或页面”。使用之前通过基于 React 的 UI 应用程序获得的 access_token 调用 API 时。
  • 澄清一下,我相信 Allowed Token Audiences 中的内容是“App ID URI”值。您可以通过在门户中转到前端应用程序的活动目录注册页面,然后单击设置 > 属性来获取此信息。
  • 或者可能是其他应用的 App ID Uri。如前所述...文档是不可能找到的,我已经失去了很多头发试图弄清楚这些东西。
【解决方案2】:

快进到 2020 年,现在对这个参数有了一些解释。 (added in 2019)

https://docs.microsoft.com/en-us/azure/app-service/configure-authentication-provider-aad#-enable-azure-active-directory-in-your-app-service-app

允许的令牌受众

如果这是一个云或服务器应用程序,并且您希望允许来自网络应用程序的身份验证令牌,请在此处添加网络应用程序的应用程序 ID URI。配置的客户端 ID 始终被隐式视为允许的受众。

【讨论】:

  • 我刚刚遇到了这个问题,我需要同时添加颁发者和允许的令牌受众值。然后我得到了一个可用的身份验证令牌。
【解决方案3】:

根据我的经验,此字段(或其中一个值)的值必须与发送到您的服务的令牌的“受众”字段中的内容相匹配(juunas 说的与对上面的问题)。上面的 bwmartens 建议使用 app id URI 听起来可行,但 Azure 门户中 AAD 注册刀片的当前版本没有列出“App ID URI”值,也没有“设置 - > 属性”不再(网站不断变化)。

在我的情况下,仅仅输入应用程序 ID 是行不通的。我发现找到此处所需值的两种最直接的方法是:

  1. 转到您的服务的 AAD 注册,并在“identifierUris”字段中查看清单。根据我的经验,此处的值应与您在 Allowed Token Audiences 列表中输入的值相匹配。
  2. 获取要发送到服务的 JWT 并对其进行解码(例如,使用 http://jwt.calebb.net/)并查看“aud”字段的值。将其放入 Allowed Token Audiences 列表中。

【讨论】:

    【解决方案4】:

    错误:JWT 验证失败:IDX10214:受众验证失败。观众:...... 表示您的应用服务上的 allowedAudiences ARM 配置需要更正。

    如何纠正: 最简单的方法是通过https://resources.azure.com/。深入了解应用服务资源 > 配置 > authsettings 并更正以下值:

    "allowedAudiences":[
    "https://<site>.azurewebsites.net"
      ]
    

    您可以导航到门户并单击身份验证的高级部分并使用 Web 应用程序的值更新允许的令牌受众。 随着当前应用服务的变化,它可以自动完成,但最好检查一下这个配置。

    目前大多数人可能正在使用 OAuth 2.0,对于他们来说,允许的令牌受众应该使用应用注册 ID 的值进行更新。

    请注意,您可以更新 Azure AD=> 应用注册 => 公开 API => Web 应用的值,这应该适合您。

    值 00000002-0000-0000-c000-000000000000 表示 Microsoft.Grpah 资源,但应为正确的资源颁发令牌以执行授权。

    【讨论】:

      【解决方案5】:

      这与 JWT 规范有关。

      "aud" (Audience) Claim:

      “aud”(受众)声明标识 JWT 的接收者 用于。打算处理 JWT 的每个主体都必须 用受众声明中的价值来识别自己。如果校长 处理索赔并不表明自己具有价值 当此声明存在时,“aud”声明,则 JWT 必须是 被拒绝。在一般情况下,“aud”值是一个 case- 敏感字符串,每个都包含一个 StringOrURI 值。在里面 当 JWT 有一个受众的特殊情况下,“aud”值可能是 包含 StringOrURI 值的单个区分大小写的字符串。这 受众价值观的解释通常是特定于应用程序的。 使用此声明是可选的。

      受众代表您请求访问的应用程序/资源。

      当您请求访问令牌时,您可以指定:

      • 一个resource参数:例如我需要一个access_token来调用https://graph.microsoft.com/ API。资源也可以是应用的client_id:00000003-0000-0000-c000-000000000000
        在这种情况下,https://graph.microsoft.com/ 是应用注册的标识符 uri,00000003-0000-0000-c000-000000000000 是应用注册的 client_id。创建应用注册时可以指定多个identifier_uri。标识符 uris 和客户端 ID 是唯一的,可用于请求 MS Graph API 的访问令牌。
      • 一个scope 参数:例如我需要一个access_token 来调用https://graph.microsoft.com/ API,但我只需要user.read 所以范围将是https://graph.microsoft.com/user.read
        要为所有授予的权限获取令牌,您只需指定 {identifier_uri}/.default,在本例中为 https://graph.microsoft.com/.default

      身份提供者随后将为所请求的应用程序颁发一个令牌。 aud 声明将是

      • client_id(如果您将 resource=client_id 指定为参数)
      • identifier_uri 如果您指定了resource=identifier_uriscope={identifier_uri}/... 作为参数。

      回到您的问题,当您在应用服务之上启用 Oauth2 时,您需要指定一些参数:

      • client_idclient_secret:这些主要用于 authorization code flow
      • issuer:此声明确定了谁在发行令牌(= 身份提供者)。对于 AAD,它将是 https://sts.windows.net/your-tenant-idhttps://sts.windows.net/your-tenant-name。这可确保收到的令牌已由所需的身份提供者颁发。
        按照惯例,发行者声明还定义了如何获取 openid 配置:{issuer}/.well-known/openid-configuration(请参阅documentation)。为简单起见,我想说openid-configuration 端点提供有关如何验证 jwt 令牌的信息。
      • Allowed audiences:根据我们所说,允许的受众可以是受保护应用程序的client_ididentifier_uri(es)

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2018-10-08
        • 1970-01-01
        • 2021-04-26
        • 2020-12-09
        • 1970-01-01
        • 1970-01-01
        • 2020-11-19
        • 2020-03-17
        相关资源
        最近更新 更多