在dotnet core 1.1 asp中,通过执行以下操作,我能够配置和使用身份中间件,然后使用jwt中间件:
app.UseIdentity();
app.UseJwtBearerAuthentication(new JwtBearerOptions() {});
Run Code Online (Sandbox Code Playgroud)
现在已经改变了,我们实现了中间件:
app.UseAuthentication();
Run Code Online (Sandbox Code Playgroud)
通过Startup.cs的ConfigureServices部分完成设置的配置.
在迁移文档中有一些使用授权模式的参考:
在2.0项目中,身份验证是通过服务配置的.每个身份验证方案都在Startup.cs的ConfigureServices方法中注册.UseIdentity方法替换为UseAuthentication.
另外还有一个参考:
设置默认身份验证方案
在1.x中,AutomaticAuthenticate和AutomaticChallenge属性旨在在单个身份验证方案上设置.没有好办法强制执行此操作.
在2.0中,这两个属性已作为单个AuthenticationOptions实例上的标志删除,并已移至基本AuthenticationOptions类中.可以在Startup.cs的ConfigureServices方法中的AddAuthentication方法调用中配置属性:
或者,使用AddAuthentication方法的重载版本来设置多个属性.在以下重载方法示例中,默认方案设置为CookieAuthenticationDefaults.AuthenticationScheme.或者,可以在您的[授权]属性或授权策略中指定身份验证方案.
在dotnet core 2.0中仍然可以使用多个身份验证模式吗?我无法使策略尊重JWT配置("承载"架构),并且只有Identity在配置时才正在工作.我找不到任何多个身份验证模式的示例.
编辑:
我重读了文档,现在明白了:
app.UseAuthentication()
Run Code Online (Sandbox Code Playgroud)
为默认架构添加自动身份验证.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();
});
Run Code Online (Sandbox Code Playgroud)
这是正确的方法,还是我应该利用框架,DI和接口来实现IAuthenticationSchemeProvider的自定义实现?
编辑 - 实施的详细信息以及在何处找到它.
可以在此处找到JWT配置,我使用策略来定义授权,其中包括已接受的身份验证架构:
https://github.com/Arragro/ArragroCMS/blob/master/src/ArragroCMS.Management/Startup.cs
自定义中间件仍然实现.Auth控制器在这里:
它使用应用程序生成的API密钥来获取对数据的只读访问权限.您可以在此处找到使用策略的控制器实现:
将数据库连接字符串更改为指向SQL Server,然后运行该应用程序.它会自动迁移数据库并配置管理员用户(support@arragro.com - ArragroPassword1!).然后转到菜单栏中的"设置"选项卡,然后单击"配置JWT ReadOnly API密钥设置"以获取密钥.在邮递员中,通过配置新选项卡并使用以下地址将其设置为POST来获取jwt令牌:
HTTP://本地主机:5000/API/auth /中只读令牌
提供标题:Content-Type:application/json
供应身体:
{
"apiKey": "the api token from …Run Code Online (Sandbox Code Playgroud) 我刚刚用 Angular 5 下载了最新版本的 AspNetBoilerplate 3.7,我试图使用我创建的新服务。它没有出现在服务代理中。如何从 swagger 更新自动生成的代码?