在IDS4和ASP.NET Core 2.2下使用JwtToken获取401访问安全页面

时间:2019-01-13 21:02:28

标签: c# asp.net-core asp.net-core-mvc identityserver4

我通过添加以下几行来配置MVC客户端。

services.AddAuthentication(JwtBearerDefaults.AuthenticationScheme)
  .AddJwtBearer();

错误消息如预期的那样是401未经授权。因此,我为承载as suggested by Microsoft添加了配置。

services.AddAuthentication(JwtBearerDefaults.AuthenticationScheme)
  .AddJwtBearer(_ =>
  {
    _.Authority = "http://localhost:5000";
    _.Audience = "http://localhost:5002";
  });

在我的解决方案中,端口5000托管IDS4提供程序,而端口5002托管MVC应用程序。那时我遇到了一个错误,因为我目前正在严格执行HTTP。建议是通过将 RequireHttpsMetadata 设置为 false 来降低安全性,如下所示。

services.AddAuthentication(JwtBearerDefaults.AuthenticationScheme)
  .AddJwtBearer(_ =>
  {
    _.Authority = "http://localhost:5000";
    _.Audience = "http://localhost:5002";
    _.RequireHttpsMetadata = false;
  })

令我感到失望的是,当我请求由 [Authorize] 装饰的活动页面时,我再次在浏览器中获得401 Unauthorized。

我不确定如何进一步诊断。我正在尝试将我的代码与大量示例进行比较,但是看不到任何明显的不同。而且,许多实例都考虑了其他版本的Core,IDS或方案。我需要建议气味的来源。

1 个答案:

答案 0 :(得分:1)

IdentityServer4 samples中,您可以看到他们正在使用AddOpenIdConnect而不是AddJwtBearer作为MVC Client示例。然后,您的MVC客户端服务注册应如下所示:

        services.AddAuthentication(options =>
            {
                options.DefaultScheme = "Cookies";
                options.DefaultChallengeScheme = "oidc";
            })
            .AddCookie("Cookies")
            .AddOpenIdConnect("oidc", options =>
            {
                options.SignInScheme = "Cookies";

                options.Authority = "http://localhost:5000";
                options.RequireHttpsMetadata = false;

                options.ClientId = "mvc";
                options.SaveTokens = true;
            });

最后,请确保您有一个允许范围访问您的api资源和适当授权类型的客户端:

            // OpenID Connect implicit flow client (MVC)
            new Client
            {
                ClientId = "mvc",
                ClientName = "MVC Client",
                AllowedGrantTypes = GrantTypes.Implicit,

                RedirectUris = { "http://localhost:5002/signin-oidc" },
                PostLogoutRedirectUris = { "http://localhost:5002/signout-callback-oidc" },

                AllowedScopes =
                {
                    IdentityServerConstants.StandardScopes.OpenId,
                    IdentityServerConstants.StandardScopes.Profile
                }
            }

AddOpenIdConnect基本上为您预配置了IDS4回调的处理程序终结点,以使用户登录和注销以及创建适当的ClaimsPrincipal