Azure活动目录 - 允许的令牌受众

31
我正在尝试在Azure上查找“ALLOWED TOKEN AUDIENCES”的文档,但似乎没有相关资料。我填写的值是令牌返回的resourceid。 这意味着什么?如果您有任何文档链接,请提供给我。

附注:实际页面上的学习链接没有提及这一点,截图似乎比较旧且没有这个字段。

提前致谢

输入图像描述


3
我一直手动进行Azure AD身份验证,所以对于这个不太确定。在Azure AD术语中,“允许的听众”通常意味着“我们将考虑为此API有效的aud声明的值”。因此,如果有人调用由Azure AD保护的API,则令牌中的aud声明必须与此处定义的其中一个匹配。您可能不应该在此处放置Azure AD Graph客户端ID :) - juunas
1
ID看起来像Azure Graph API的资源ID。这意味着,正如@juunas所说,您的应用程序具有使用该API的某些权限。 - RasmusW
1
发现了这个链接,并留言询问她编辑的文档是哪一个:https://github.com/MicrosoftDocs/azure-docs/issues/12377 - Tracy
5个回答

15

我也在文档中摸索了很久。以下是让Angular前端应用程序调用后端API应用程序所需的配置:

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

接下来,用户想要与API应用程序交互。
操作步骤如下:

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

安全性非常重要。文档中关于这些内容的说明非常混乱令人困惑。Owin/Katana似乎已经过时了。根据这个配置,您将不需要任何Owin/Katana相关的内容。另一个证明Owin/Katana过时的迹象是与Microsoft/System IdentityModel有关的大规模破坏性变化,这似乎无法构建、区分和修复。我希望Microsoft能够创建一个“端点”,展示当前正在使用哪些内容以及如何执行特定步骤。如果您能使应用程序实现这一点,它会非常简洁。

enter image description here


5
在使用之前通过基于React的UI应用获取的access_token调用API时,我不知道为什么会一直收到“您没有权限查看此目录或页面。”的提示。 - Jussi Palo
1
澄清一下,我认为允许的令牌受众应该是“应用程序 ID URI”值。您可以通过转到门户中前端应用程序的活动目录注册页面,然后单击“设置”>“属性”来获取此值。 - bwmartens
1
或许是另一个应用的应用程序 ID Uri。正如提到的...文档很难找到,我为了弄清楚这些东西已经掉了很多头发。 - bwmartens

8

我刚刚遇到这个问题,需要添加发行者和允许的令牌受众值。然后我获得了一个可用的身份验证令牌。 - joe_coolish

5
根据我的经验,此字段(或其中一个值)的值必须与发送到您的服务的令牌的“受众”字段中的值匹配(如juunas在上面的问题中所评论的)。bwmartens建议使用应用程序ID URI听起来很可行,但Azure门户中的AAD注册版当前版本不列出“应用程序ID URI”值,也没有“设置->属性”(该网站一直在变化)。
在我的情况下,仅输入应用程序ID无效。我发现找到此处所需值的两种最简单方法是:
1.转到您服务的AAD注册,并查看清单中的“identifierUris”字段。根据我的经验,此处的值应与您放入“允许的令牌受众”列表中的值匹配。
2.获取您发送到服务的JWT并解码它(例如使用http://jwt.calebb.net/),然后查看“aud”字段的值。将其放入“允许的令牌受众”列表中。

4

这与JWT规范有关。

"aud" (Audience) Claim

"aud"(受众)声明标识了JWT的接收者。每个要处理JWT的主体必须在audience声明中使用一个值来标识自己。如果处理该声明的主体在此声明存在时没有使用一个值来标识自己,则JWT必须被拒绝。一般情况下,“aud”值是一个大小写敏感的字符串数组,每个字符串都包含一个StringOrURI值。当JWT只有一个受众时,特殊情况下,“aud”值可以是一个包含StringOrURI值的单个大小写敏感字符串。受众值的解释通常是应用程序特定的。使用此声明是可选的。

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

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

  • 一个resource参数:例如,我需要访问令牌来调用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。标识符URI和client_id是唯一的,可用于请求MS Graph API的访问令牌。
  • 一个scope参数:例如,我需要访问令牌来调用https://graph.microsoft.com/ API,但我只需要user.read,所以范围将是https://graph.microsoft.com/user.read
    要获取所有已授予权限的令牌,只需指定{identifier_uri}/.default,因此在这种情况下为https://graph.microsoft.com/.default

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

  • 如果您将resource=client_id作为参数指定,则为client_id
  • 如果您将resource=identifier_uriscope={identifier_uri}/...作为参数指定,则为identifier_uri

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

  • client_idclient_secret:这些主要用于授权码流程
  • issuer:此声明标识了谁发出令牌(即身份提供者)。对于AAD,它将是https://sts.windows.net/your-tenant-idhttps://sts.windows.net/your-tenant-name。这确保接收到的令牌已由所需的身份提供者发布。
    按照惯例,发行人声明还定义了如何获取openid-configuration:{issuer}/.well-known/openid-configuration(请参阅文档)。简单地说,openid-configuration端点提供有关如何验证jwt令牌的信息。
  • Allowed audiences:根据我们所说的,允许的观众可以是受保护应用程序的client_ididentifier_uri(es)

2
错误: JWT验证失败:IDX10214:受众验证失败。受众群体:.... 表明您的应用服务上的allowedAudiences ARM配置需要进行更正。
如何更正: 最简单的方法是通过https://resources.azure.com/进行操作。深入到应用服务资源中,找到config > authsettings并按以下方式更正值:
"allowedAudiences":[
"https://<site>.azurewebsites.net"
  ]

或者

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

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

请注意,您可以更新 Azure AD => 应用程序注册 => 公开 API => Web 应用程序的值,这样就可以为您工作。

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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接