使用来自服务主体的 oAuth 令牌进行身份验证,产生 "the audience is invalid" 错误
Authenticating with oAuth token from service principal, produces a "the audience is invalid" error
我正在使用另一个开发人员设置的服务主体进行身份验证。我正在尝试针对内部开发的 API 进行身份验证。 ASP 在其他开发者使用 SDK 进行身份验证时有效。但是当我尝试使用 Postman 时,我收到了 401 错误。
问题是我真的不知道该使用哪个资源。我相信客户端 ID、密码和范围是正确的。但我似乎无法找到有关要使用的资源类型的任何信息。对于内部开发的 API,有什么方法可以确定这一点?我已经使用了大量公开可用的。就像测试一样,因为我找不到任何信息。留空是不行的。
假设您在 azure ad 应用程序注册中创建了两个应用程序,一个代表客户端应用程序,另一个代表 api 应用程序,(或者在应用程序注册中您必须选择所需的客户端应用程序)然后您必须使用客户端应用程序来调用 Web api 应用程序。
注意:当您调用 web API 时,请确保您发送的是访问令牌(而不是 ID 令牌)
- 您跟踪在 jwt.io 中获得的令牌。
Azure AD 受众必须匹配“aud”声明。
Audience 必须等于为应用程序设置的 AppId 或客户端 ID。
检查 jwt.io 中令牌的 iss 值并查看登录版本 url。如果它是 v2,请在 API 的应用程序注册中将清单 json 设置为 2,因为它可能默认为 2。
“accessTokenAcceptedVersion”:2
- 在应用程序注册中,如果您公开的 api 类似于: api://xxxx-xxx-xxx ,那么您应用程序 appsettings.json 中的客户端 ID 必须是一样。
Note:Client id may be configured differently according to application.
If above doesn't work try client ID : instead of api://
- 您可能需要为您的客户端应用程序授予应用程序权限(这是您自己定义的角色权限,您可以在我的APIs中找到它add permissions)。然后你需要点击admin consent按钮来授予administrator consent这个权限。
这里我暴露了作用域>> api://xxx-xxx-xxx/access_as_user。确保使用在门户中配置的相同范围包含在应用程序配置中。范围也应包括代码中公开资源的标识符(应用程序 ID URI)。
例如:范围:“api://xxxx-xxx-xxxx/access_as_user “
在 postman Set Authorization header 中引用全局变量 'Bearer {{bearerToken}}' 并将授权数据添加到 Request Headers,
如果您使用的是邮递员回调 uri,请在邮递员配置中取消选中授权使用浏览器进行回调url。(请参阅enable-azure-ad-authentication| csharpcorner)
我正在使用另一个开发人员设置的服务主体进行身份验证。我正在尝试针对内部开发的 API 进行身份验证。 ASP 在其他开发者使用 SDK 进行身份验证时有效。但是当我尝试使用 Postman 时,我收到了 401 错误。
问题是我真的不知道该使用哪个资源。我相信客户端 ID、密码和范围是正确的。但我似乎无法找到有关要使用的资源类型的任何信息。对于内部开发的 API,有什么方法可以确定这一点?我已经使用了大量公开可用的。就像测试一样,因为我找不到任何信息。留空是不行的。
假设您在 azure ad 应用程序注册中创建了两个应用程序,一个代表客户端应用程序,另一个代表 api 应用程序,(或者在应用程序注册中您必须选择所需的客户端应用程序)然后您必须使用客户端应用程序来调用 Web api 应用程序。 注意:当您调用 web API 时,请确保您发送的是访问令牌(而不是 ID 令牌)
- 您跟踪在 jwt.io 中获得的令牌。 Azure AD 受众必须匹配“aud”声明。 Audience 必须等于为应用程序设置的 AppId 或客户端 ID。 检查 jwt.io 中令牌的 iss 值并查看登录版本 url。如果它是 v2,请在 API 的应用程序注册中将清单 json 设置为 2,因为它可能默认为 2。 “accessTokenAcceptedVersion”:2
- 在应用程序注册中,如果您公开的 api 类似于: api://xxxx-xxx-xxx ,那么您应用程序 appsettings.json 中的客户端 ID 必须是一样。
Note:Client id may be configured differently according to application. If above doesn't work try client ID : instead of api://
- 您可能需要为您的客户端应用程序授予应用程序权限(这是您自己定义的角色权限,您可以在我的APIs中找到它add permissions)。然后你需要点击admin consent按钮来授予administrator consent这个权限。
这里我暴露了作用域>> api://xxx-xxx-xxx/access_as_user。确保使用在门户中配置的相同范围包含在应用程序配置中。范围也应包括代码中公开资源的标识符(应用程序 ID URI)。 例如:范围:“api://xxxx-xxx-xxxx/access_as_user “
在 postman Set Authorization header 中引用全局变量 'Bearer {{bearerToken}}' 并将授权数据添加到 Request Headers, 如果您使用的是邮递员回调 uri,请在邮递员配置中取消选中授权使用浏览器进行回调url。(请参阅enable-azure-ad-authentication| csharpcorner)