authentication - ASP.net MVC Core 和 IdentityServer 4:在 AddAuthentication 中设置 defaultScheme
问题描述
我正在查看下面的代码。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(AuthenticationSchemes =
JwtBearerDefaults.AuthenticationScheme)]
这仅适用于 Accesstoken,如果我需要两者,我也添加 cookie
解决方案
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 设置并行工作。
推荐阅读
- git - Git 因致命错误而失败 - 无法读取用户名终端提示已禁用
- apache - 从外部应用程序到 apache httpd Web 服务器的 httpS 调用问题
- r - R Shiny 中的嵌套 dq_accordion 菜单
- google-apps-script - 如何使用 Google 脚本将名称插入公式?
- node.js - 在 Loopback 中保存 Hook 后如何避免内部更新
- javascript - 如何在Javascript中过滤对象数组中的数组?
- node.js - 尝试使用 gRPC 运行 node.js 时出错
- reactjs - 即使我将托盘的声明放在全局变量中,电子托盘也会消失
- python - as.Date() Python 中的 R 等效项
- android - Android: Display ImageView on the Activity after touching the screen and then move with finger