IdentityServer4 - 从 MVC 以用户身份调用 API



我正在尝试了解如何调用通过 IdentityServer4 保护的 API。

基本上,我有以下网站: - 一个身份服务器应用程序, - 一个网络接口和 - 客户端 Web 应用程序。

我的设置就像这里的 IdentityServer 示例一样。

我定义了一个表示我的客户端 Web 应用程序的Client和一个表示我的 Web API 的APIResource

在我的客户端 Web 应用程序中,我想对 WebAPI 进行 HTTP 调用,但我希望看起来好像我是登录用户,因此我想使"电子邮件"范围可用于 Web API。

我在 Web 应用程序中执行的操作是获取"access_token",并将其传递给 Web API:

var accessToken = await httpContextAccessor.HttpContext.Authentication.GetTokenAsync($"access_token");
var client = new HttpClient();
client.SetBearerToken(accessToken);

这允许我调用客户端,因此授权步骤正常工作,但 Web API 上的用户声明没有适当的范围。

我做错了什么吗?

access_token可以包含 IdentityServer4 中的声明信息。必须在 ApiResource 定义中指定所需的声明。

否则,您必须随请求一起发送 JWT id_token。

new ApiResource(ApiResourceNames.SomeApiAccess, "Access to some api.", new List<string>(){
new IdentityResources.OpenId().Name,
new IdentityResources.Profile().Name,
new IdentityResources.Email().Name
}),

您可以在 Web api 中添加范围,例如

app.UseIdentityServerAuthentication(new IdentityServerAuthenticationOptions
{
Authority = "https://demo.identityserver.io",
ApiName = "api1",
AllowedScopes = { "api1.read", "api1.write" }
});

您是如何配置 Web API 的?如果仍然不起作用,请发布代码!

最新更新