小编did*_*man的帖子

Dotnet核心2.0认证多个模式身份cookie和jwt

在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部分完成设置的配置.

在迁移文档中有一些使用授权模式的参考:

https://docs.microsoft.com/en-us/aspnet/core/migration/1x-to-2x/identity-2x#authentication-middleware-and-services

在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控制器在这里:

https://github.com/Arragro/ArragroCMS/blob/master/src/ArragroCMS.Web.Management/ApiControllers/AuthController.cs

它使用应用程序生成的API密钥来获取对数据的只读访问权限.您可以在此处找到使用策略的控制器实现:

https://github.com/Arragro/ArragroCMS/blob/master/src/ArragroCMS.Web.Management/ApiControllers/SitemapController.cs

将数据库连接字符串更改为指向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)

asp.net authentication jwt asp.net-identity .net-core

28
推荐指数
2
解决办法
1万
查看次数

MediaElement Audio IE8 player.play()事件"对象不支持此属性或方法"

我有一个使用MediaElement插件的页面.在Chrome上一切正常,但是在IE8中,音频元素上的方法player.play()似乎存在问题.

从版本2.3.0下载演示"mediaelementplayer-audio.html".如果你然后添加代码"$('audio')[0] .player.play();" 在最终脚本标记中的代码之后,当您打开演示时,您将能够在IE8中看到问题.

似乎就像Silverlight插件没有来自javascript的事件触发(这是正确的虽然文档说它应该是mp3的flash插件吗?).或者我需要做些什么才能使这个工作?

mediaelement.js

12
推荐指数
1
解决办法
1161
查看次数

DbContext SaveChanges语句执行顺序

我有一个表,在具有Ordinal列的表上具有唯一索引.例如,表格将包含以下列:

TableId,ID1,ID2,Ordinal

唯一索引跨越ID1,ID2,Ordinal列.

我遇到的问题是,当从数据库中删除记录时,我会重新排序序数,以便它们再次顺序.我的删除功能如下所示:

    public void Delete(int id)
    {
        var tableObject = Context.TableObject.Find(id);
        Context.TableObject.Remove(tableObject);
        ResequenceOrdinalsAfterDelete(tableObject);
    }
Run Code Online (Sandbox Code Playgroud)

问题在于,当我调用Context.SaveChanges()时,它会打破唯一索引,因为它似乎以不同于传递的顺序执行语句.例如,发生以下情况:

  1. 重新排列普通话
  2. 删除记录

代替:

  1. 删除记录
  2. 重新排列普通话

这是EF的正确行为吗?如果是,是否有一种方法可以覆盖此行为以强制执行顺序?

如果我没有正确解释,请告诉我...

entity-framework-4 ef4-code-only ef-code-first dbcontext

11
推荐指数
1
解决办法
3954
查看次数

从IQueryable访问DbContext

我正在尝试实现可能需要使用Redis的缓存模式.此模式的问题是我需要禁用Configuration.ProxyCreationEnabled,然后重新启用它以避免Web场中出现任何问题.

我想要做的是从IQueryable访问DbContext,所以我可以做一次而不是到处.最简单的方法是将正在使用的DbContext传递给我的缓存扩展,但是我遇到了这个帖子:

访问IQueryable后面的DataContext

有没有办法使用EF 4.1 Code Fist(DbSet等)以类似于上面链接的方式访问DbContext?

我试图自己找到这个但是很难在IQueryable中使用反射从引用的DbSet中找到基类.

code-first ef4-code-only

6
推荐指数
1
解决办法
2577
查看次数

EFT CTP5在插入时禁用标识列

我有一个现有的数据库,我想迁移到EF CTP5.我遇到的问题是,当我插入现有数据时,我需要它移动保留当前身份主键以用于其他外键约束.

我想使用EF CTP5代码进行迁移,因此我不必编写大量SQL,甚至不必在SSIS包中包含它.

我试图使用sql语法:

SET IDENTITY_INSERT tableName ON

SET IDENTITY_INSERT tableName OFF

但是,当调用DbContext.SaveChanges()时,上述语法在不同的连接中发生,并且标识列由EF CTP5框架控制,即使在指定ID时也是如此.

是否有一种方法可以禁用或删除与以下类似的对象的身份约定,但是在运行时而不是在实例化数据库时:

public class BlogContext : DbContext
{
    public DbSet<Blog> Blogs { get; set; }
    public DbSet<Post> Posts { get; set; }

    protected override void OnModelCreating(ModelBuilder modelBuilder)
    {
        modelBuilder.Conventions.Remove<StoreGeneratedIdentityKeyConvention>();
    }
}
Run Code Online (Sandbox Code Playgroud)

谢谢

entity-framework-ctp5

1
推荐指数
1
解决办法
1978
查看次数