- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
在 dotnet core 1.1 asp 中,我能够通过执行以下操作来配置和使用身份中间件,然后使用 jwt 中间件:
app.UseIdentity();
app.UseJwtBearerAuthentication(new JwtBearerOptions() {});
现在情况发生了变化,我们通过以下方式实现中间件:
app.UseAuthentication();
设置的配置是通过Startup.cs的ConfigureServices部分完成的。
迁移文档中引用了一些授权架构的使用:
In 2.0 projects, authentication is configured via services. Each authentication scheme is registered in the ConfigureServices method of Startup.cs. The UseIdentity method is replaced with UseAuthentication.
此外还有一个引用:
Setting Default Authentication Schemes
In 1.x, the AutomaticAuthenticate and AutomaticChallenge properties were intended to be set on a single authentication scheme. There was no good way to enforce this.
In 2.0, these two properties have been removed as flags on the individual AuthenticationOptions instance and have moved into the base AuthenticationOptions class. The properties can be configured in the AddAuthentication method call within the ConfigureServices method of Startup.cs:
Alternatively, use an overloaded version of the AddAuthentication method to set more than one property. In the following overloaded method example, the default scheme is set to CookieAuthenticationDefaults.AuthenticationScheme. The authentication scheme may alternatively be specified within your individual [Authorize] attributes or authorization policies.
在 dotnet core 2.0 中是否仍然可以使用多个身份验证模式?我无法获得尊重 JWT 配置(“承载”模式)的策略,并且目前只有身份在配置两者的情况下工作。我找不到任何多个身份验证模式的示例。
编辑:
我重新阅读了文档,现在了解到:
app.UseAuthentication()
添加针对默认架构的自动身份验证。 Identity 为您配置默认架构。
我通过在 Startup.cs 配置中执行以下操作,解决了似乎针对新 api 的黑客攻击的问题:
app.UseAuthentication();
app.Use(async (context, next) =>
{
if (!context.User.Identity.IsAuthenticated)
{
var result = await context.AuthenticateAsync(JwtBearerDefaults.AuthenticationScheme);
if (result?.Principal != null)
{
context.User = result.Principal;
}
}
await next.Invoke();
});
这是执行此操作的正确方法吗?或者我应该利用框架、DI 和接口(interface)来自定义实现 IAuthenticationSchemeProvider?
编辑 - 实现的更多详细信息以及在哪里可以找到它。
可以在此处找到 JWT 配置,我正在使用策略来定义授权,其中包括接受的身份验证架构:
https://github.com/Arragro/ArragroCMS/blob/master/src/ArragroCMS.Management/Startup.cs
自定义中间件仍在实现。 Auth Controller 在这里:
它使用应用程序生成的 API key 来获取对数据的只读访问权限。您可以在此处找到利用该策略的 Controller 的实现:
更改数据库连接字符串以指向您的 SQL Server,然后运行应用程序。它会自动迁移数据库并配置管理员用户(support@arragro.com - ArragroPassword1!)。然后转到菜单栏中的“设置”选项卡,单击“配置 JWT ReadOnly API key 设置”以获取 key 。在 postman 中,通过配置新选项卡并将其设置为使用以下地址进行 POST 来获取 jwt token :
http://localhost:5000/api/auth/readonly-token
提供 header :内容类型:application/json
供应 body :
{
"apiKey": "the api token from the previous step"
}
复制响应中的 token ,然后在 postman 中使用以下内容:
http://localhost:5000/api/sitemap/flat
Authorization: "bearer - The token you received in the previous request"
由于自定义中间件,它最初会起作用。注释掉上面提到的代码并重试,您将收到 401。
编辑-@DonnyTian 下面的答案涵盖了我在他的评论中的解决方案。我遇到的问题是在 UseMvc 上设置默认策略,但不提供架构:
services.AddMvc(config =>
{
var defaultPolicy = new AuthorizationPolicyBuilder(new[] { JwtBearerDefaults.AuthenticationScheme, IdentityConstants.ApplicationScheme })
.RequireAuthenticatedUser()
.Build();
config.Filters.Add(new AuthorizeFilter(defaultPolicy));
config.Filters.Add(new AutoValidateAntiforgeryTokenAttribute());
config.Filters.Add(new ValidateModelAttribute());
});
按照建议,这无需自定义中间件即可工作。
最佳答案
Asp.Net Core 2.0肯定支持多种身份验证方案。您可以尝试在 Authorize
属性中指定架构,而不是使用身份验证中间件进行黑客攻击:
[Authorize(AuthenticationSchemes = JwtBearerDefaults.AuthenticationScheme)]
我尝试了一下,效果很好。假设您已添加 Identity 和 JWT,如下所示:
services.AddIdentity<ApplicationUser, ApplicationRole>()
services.AddAuthentication(JwtBearerDefaults.AuthenticationScheme)
由于AddIdentity()
已经将cookie身份验证设置为默认模式,因此我们必须在 Controller 的Authorize
属性中指定模式。目前,我不知道如何覆盖由 AddIdentity()
设置的默认架构,或者我们最好不要这样做。
解决方法是编写一个新类(您可以将其称为 JwtAuthorize),该类派生自 Authorize
并将 Bearer 作为默认架构,因此您不必每次都必须指定它。
更新
找到了覆盖Identity默认认证方案的方法!
而不是下面的行:
services.AddAuthentication(JwtBearerDefaults.AuthenticationScheme)
使用以下重载来设置默认架构:
services.AddAuthentication(option =>
{
option.DefaultAuthenticateScheme = JwtBearerDefaults.AuthenticationScheme;
})
.AddJwtBearer(options =>....
更新2正如评论中提到的,您可以通过将 Identity 和 JWT 身份验证连接在一起来启用它们。
[Authorize(AuthenticationSchemes = "Identity.Application"+ ","+ JwtBearerDefaults.AuthenticationScheme)]
关于asp.net - Dotnet core 2.0身份验证多模式身份cookie和jwt,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45778679/
我正在使用SQL Server 2008 R2,并且想创建一个触发器。 对于每个添加(仅添加),将像这样更新一列: ABC-CurrentYear-AutoIncrementCode 例子: ABC-
是否可以在显示最终一致性的数据存储中创建/存储用户帐户? 似乎不可能在没有一堆架构复杂性的情况下管理帐户创建,以避免可能发生具有相同 UID(例如电子邮件地址)的两个帐户的情况? 最终一致性存储的用户
您好, 我有一个带有 Identity 的 .NetCore MVC APP并使用 this指导我能够创建自定义用户验证器。 public class UserDomainValidator : IU
这与以下问题相同:HiLo or identity? 我们以本站的数据库为例。 假设该站点具有以下表格: 帖子。 投票。 注释。 使用它的最佳策略是什么: 身份 - 这是更常见的。 或者 HiLo -
我想将 Blazor Server 与 ASP.NET Identity 一起使用。但我需要使用 PostgreSQL 作为用户/角色存储,因为它在 AWS 中。 它不使用 EF,这是我需要的。 我创
我正在开发一个 .NET 应用程序,它可以使用 Graph API 代表用户发送电子邮件。 提示用户对应用程序进行授权;然后使用获取的访问 token 来调用 Graph API。刷新 token 用
我使用 ASP.NET 身份和 ClaimsIdentity 来验证我的用户。当用户通过身份验证时,属性 User.Identity 包含一个 ClaimsIdentity 实例。 但是,在登录请求期
所以我在两台机器上都安装了 CYGWIN。 如果我这样做,它会起作用: ssh -i desktop_rsa root@remoteserver 这需要我输入密码 ssh root@remoteser
我尝试在 mac osx 上的终端中通过 telnet 连接到 TOR 并请求新身份,但它不起作用,我总是收到此错误消息: Trying 127.0.0.1... telnet: connect to
我正在开发一个 .NET 应用程序,它可以使用 Graph API 代表用户发送电子邮件。 提示用户对应用程序进行授权;然后使用获取的访问 token 来调用 Graph API。刷新 token 用
我正在开发一项服务,客户可以在其中注册他们的 webhook URL,我将发送有关已注册 URL 的更新。为了安全起见,我想让客户端(接收方)识别是我(服务器)向他们发送请求。 Facebook和 G
在 Haskell 中,有没有办法测试两个 IORef 是否相同?我正在寻找这样的东西: IORef a -> IORef a -> IO Bool 例如,如果您想可视化由 IORef 组成的图形,这
我是 .NET、MVC 和身份框架的新手。我注意到身份框架允许通过注释保护单个 Controller 操作。 [Authorize] public ActionResult Edit(int? Id)
我有一列具有身份的列,其计数为19546542,我想在删除所有数据后将其重置。我需要类似ms sql中的'dbcc checkident'这样的内容,但在Oracle中 最佳答案 在Oracle 12
这是我用来创建 session 以发送电子邮件的代码: props.put("mail.smtp.auth", "true"); props.put("mail.smtp.starttls.enabl
我想了解 [AllowAnonymous] 标签的工作原理。 我有以下方法 [HttpGet] public ActionResult Add() { return View(); } 当我没
在使用沙盒测试环境时,PayPal 身份 token 对某些人显示而不对其他人显示的原因是否有任何原因。 我在英国使用 API,终生无法生成或找到 token 。 我已经遵循协议(protocol)并
我对非常简单的事情有一些疑问:IDENTITY。我尝试在 phpMyAdmin 中创建表: CREATE TABLE IF NOT EXISTS typEventu ( typEventu
习语 #1 和 #5 是 FinnAPL Idiom Library两者具有相同的名称:“Progressive index of (without replacement)”: ((⍴X)⍴⍋⍋X⍳
当我第一次在 TFS 中设置时,我的公司拼错了我的用户名。此后他们将其更改为正确的拼写,但该更改显然未反射(reflect)在 TFS 中。当我尝试 checkin 更改时,出现此错误: 有没有一种方
我是一名优秀的程序员,十分优秀!