我也在文档中摸索了很久。以下是让Angular前端应用程序调用后端API应用程序所需的配置:
在前端应用程序中,用户点击链接并使用Azure Directory进行身份验证。令牌将保留在浏览器的会话中。
接下来,用户想要与API应用程序交互。
操作步骤如下:
安全性非常重要。文档中关于这些内容的说明非常混乱令人困惑。Owin/Katana似乎已经过时了。根据这个配置,您将不需要任何Owin/Katana相关的内容。另一个证明Owin/Katana过时的迹象是与Microsoft/System IdentityModel有关的大规模破坏性变化,这似乎无法构建、区分和修复。我希望Microsoft能够创建一个“端点”,展示当前正在使用哪些内容以及如何执行特定步骤。如果您能使应用程序实现这一点,它会非常简洁。
回溯到2020年,现在对于这个参数有些解释了。(2019年添加)
允许的令牌受众
如果这是一个云或服务器应用程序,并且您想允许来自Web应用程序的身份验证令牌,请在此处添加Web应用程序的应用程序ID URI。配置的客户端ID始终被隐式认为是允许的受众。
这与JWT规范有关。
"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_uri
或scope={identifier_uri}/...
作为参数指定,则为identifier_uri
。回到您的问题,当您在应用程序服务上启用Oauth2时,需要指定一些参数:
client_id
和client_secret
:这些主要用于授权码流程。issuer
:此声明标识了谁发出令牌(即身份提供者)。对于AAD,它将是https://sts.windows.net/your-tenant-id
或https://sts.windows.net/your-tenant-name
。这确保接收到的令牌已由所需的身份提供者发布。{issuer}/.well-known/openid-configuration
(请参阅文档)。简单地说,openid-configuration
端点提供有关如何验证jwt令牌的信息。Allowed audiences
:根据我们所说的,允许的观众可以是受保护应用程序的client_id
或identifier_uri(es)
。"allowedAudiences":[
"https://<site>.azurewebsites.net"
]
或者
您可以导航到门户并单击身份验证的高级部分,使用 Web 应用程序的值更新允许的令牌受众。随着当前应用程序服务的更改,它可以自动完成,但最好检查此配置。
目前,大多数人可能正在使用 OAuth 2.0,对于他们,允许的令牌受众应该更新为应用程序注册 ID 的值。
请注意,您可以更新 Azure AD => 应用程序注册 => 公开 API => Web 应用程序的值,这样就可以为您工作。
值 00000002-0000-0000-c000-000000000000 表示 Microsoft.Grpah 资源,但是令牌应该针对正确的资源发行以执行授权。