【问题标题】:ASP.net MVC Core and IdentityServer 4: Setting defaultScheme in AddAuthenticationASP.net MVC Core 和 IdentityServer 4:在 AddAuthentication 中设置 defaultScheme
【发布时间】:2018-04-30 07:16:25
【问题描述】:

我正在查看下面的代码。 AddAuthentication 添加了带有“Cookies”的 defaultScheme。这是否意味着当前的mvc应用默认只接受Cookie认证而不接受Access Token。

services.AddOptions();
//services.Configure(Configuration);
services.AddDistributedMemoryCache(); // Adds a default in-memory implementation of IDistributedCache
services.AddSession();

JwtSecurityTokenHandler.DefaultInboundClaimTypeMap.Clear();

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

目前,我想通过我的移动应用程序访问一个页面,该应用程序使用从应用程序本身登录的访问令牌进行身份验证。 我想知道如何使用 AccessToken 而不是 Cookie 来请求我的 webview 中的网页。

我可以传入具有不同可接受方案的 Authorize 属性。我想知道这是设置它的方法。

[Authorize(AuthenticationSchemes = 
    JwtBearerDefaults.AuthenticationScheme)]

这仅适用于 Accesstoken,如果我需要两者我也添加 cookie

【问题讨论】:

  • 您需要在身份验证方法中使用AddJwtBearer(options => { ... }); 才能使用访问令牌。
  • 这会影响所有可以使用访问令牌访问的页面吗?

标签: authentication asp.net-core access-token identityserver4


【解决方案1】:
options.DefaultScheme = "Cookies";

这意味着如果没有另外指定,认证方案将是"Cookies"

options.DefaultChallengeScheme = "oidc";

这意味着如果没有另外指定,默认的质询认证方案将为"oidc"

这就是 OIDC 和 Cookie 身份验证方案通常相互配合的方式:应用程序将尝试使用现有 cookie 对用户进行身份验证。如果失败(因为没有 cookie),那么将使用 OIDC 方案进行身份验证质询。然后,这会将身份验证转发给外部提供者,当验证成功时,OIDC 方案将使用 Cookie 身份验证方案将用户登录。这会创建 cookie,因此在下一次请求时,cookie 身份验证方案将能够对用户进行身份验证(无需再次询问 OIDC 方案)。

如果您希望其他身份验证方案起作用,那么您也必须添加它们。 AddAuthentication(…).AddCookie(…).AddOpenIdConnect(…) 只会设置这个链。如果您还需要 JWT 不记名身份验证,则还需要对其进行配置。

但是仅仅因为你.AddJwtBearer(…) 这并不意味着正常流程的任何事情都会改变:Cookie 方案仍将是默认方案,OIDC 方案仍将是默认挑战。正如我上面所说:除非您另有说明。

因此,当您想要使用 JWT Bearer 身份验证授权用户时,您需要显式触发它。正如您自己注意到的,这可以使用Authorize 属性来完成。但为了使其正常工作,您仍然必须正确设置 JWT Bearer 身份验证。但它可以与已经设置好的 Cookie/OIDC 设置并行工作。

【讨论】:

  • 我对此很陌生.. 有没有简单的设置可供查看?
  • 您可以在此处遵循任何适用于 ASP.NET Core 的 JWT Bearer 身份验证教程。例如this one.
猜你喜欢
  • 1970-01-01
  • 2019-02-28
  • 2017-02-04
  • 1970-01-01
  • 2021-08-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多