Azure AD - 在 C# Web API 中使用来自 Angular SPA 的 Graph API 访问令牌
Azure AD - Using Graph API access token from Angular SPA in C# Web API
在 Azure AD 企业应用程序方面,我似乎遗漏了一些基本知识。
我有一个应用程序 运行 作为 Angular SPA,其后端 ASPNETCore API 在 Azure AD 中有 2 个单独的应用程序注册。 MyAPI 在 MySPA 中公开为范围“access_as_user”。
我的API 本身没有身份验证流程。
我想通过 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 自然具有作用域权限,因此观众错误是有道理的
"aud": "api://XXXXXXXXXXXXXXXXXXXXXXXX",
"scp": "access_as_user"
MyAPI 如何代表用户访问 MS Graph API?
设法使用 Graph SDK 解决了这个问题
我在 .AddMicrosoftIdentityWebApi(Configuration)
之后的启动中添加了以下内容
.EnableTokenAcquisitionToCallDownstreamApi()
.AddMicrosoftGraph()
.AddInMemoryTokenCaches();
这允许我在我的 API 控制器中注入服务客户端:
public GraphAPIController(GraphServiceClient client)
{
this.client = client;
}
public async Task<IActionResult> GetProfile()
{
return await client.Me.Request().GetAsync();
}
在 Azure AD 企业应用程序方面,我似乎遗漏了一些基本知识。
我有一个应用程序 运行 作为 Angular SPA,其后端 ASPNETCore API 在 Azure AD 中有 2 个单独的应用程序注册。 MyAPI 在 MySPA 中公开为范围“access_as_user”。
我的API 本身没有身份验证流程。
我想通过 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 自然具有作用域权限,因此观众错误是有道理的
"aud": "api://XXXXXXXXXXXXXXXXXXXXXXXX",
"scp": "access_as_user"
MyAPI 如何代表用户访问 MS Graph API?
设法使用 Graph SDK 解决了这个问题
我在 .AddMicrosoftIdentityWebApi(Configuration)
.EnableTokenAcquisitionToCallDownstreamApi()
.AddMicrosoftGraph()
.AddInMemoryTokenCaches();
这允许我在我的 API 控制器中注入服务客户端:
public GraphAPIController(GraphServiceClient client)
{
this.client = client;
}
public async Task<IActionResult> GetProfile()
{
return await client.Me.Request().GetAsync();
}