在 Azure AD 企业应用程序方面,我似乎遗漏了一些基本的东西。
我有一个作为 Angular SPA 运行的应用程序,其后端 ASPNETCore API 在 Azure AD 中有 2 个单独的应用程序注册。MyAPI 在 MySPA 中作为范围“access_as_user”公开。
MyAPI 本身没有身份验证流程。
我想通过 MyAPI 实现委托访问 MS Graph API 调用。目前它仅作为具有应用程序权限的守护程序服务运行。
MySPA 可以毫无问题地调用https://graph.microsoft.com/v1.0/me/并返回配置文件。
我可以看到 jwt 具有 User.Read 范围:
"scp": "openid profile User.Read email"
MyAPI 使相同的请求失败,并出现以下错误:
code: "InvalidAuthenticationToken"
message: "Access token validation failure. Invalid audience."
public async Task<IActionResult> GetProfile([FromHeader] string authorization)
{
var tokenFromHeader = authorization.Replace("Bearer ", "");
return await ("https://graph.microsoft.com/v1.0/me/")
.WithOAuthBearerToken(tokenFromHeader)
.WithHeader("Content-Type", "application/json")
.GetJsonAsync();
}
JWT 自然有 scoped 权限,所以观众错误是有道理的
"aud": "api://XXXXXXXXXXXXXXXXXXXXXXXX",
"scp": "access_as_user"
MyAPI 如何代表用户访问 MS Graph API?