IdentityServer4 - 从MVC

时间:2017-07-05 15:28:46

标签: identityserver4

我正在努力了解如何通过IdentityServer4调用受保护的API。

基本上,我有以下网站: - IdentityServer应用程序, - 一个Web API和 - 客户端Web应用程序。

我的设置就像IdentityServer样本here

我定义了代表我的客户端Web应用程序的Client,以及代表我的Web Api的APIResource

在我的客户端Web应用程序中,我想对WebAPI进行HTTP调用,但我希望看起来好像我是登录用户,所以我想让Web Api可以使用'email'范围。

我在Web应用程序中的做法是获取'access_token',并将其传递给Web API:

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

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

我做错了吗?

2 个答案:

答案 0 :(得分:1)

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
                }),

答案 1 :(得分:0)

您可以在网络API中添加范围

app.UseIdentityServerAuthentication(new IdentityServerAuthenticationOptions
{
    Authority = "https://demo.identityserver.io",
    ApiName = "api1",

    AllowedScopes = { "api1.read", "api1.write" }
});

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