ASP.NET身份cookie是否可以向后兼容表单身份验证?

时间:2017-08-29 17:25:17

标签: c# asp.net cookies asp.net-identity forms-authentication

我有许多现有的ASP.NET MVC Web应用程序都使用ASP.NET成员身份和表单身份验证而使用OWIN,但我希望在.NET Core中开发新的应用程序1.1使用IdentityServer4进行身份验证。我有一个使用自定义用户存储实现的IdentityServer,因此旧的ASP.NET成员资格数据库中的现有用户可以登录到我的IdentityServer(请参阅this StackOverflow问题以获取更多相关信息),但ASP创建的身份验证cookie。使用表单身份验证的旧应用程序无法识别NET身份。

我希望在较旧的Forms身份验证应用和使用ASP.NET身份的较新应用之间进行单点登录,最好尽可能少地对旧应用进行更改。有没有办法让ASP.NET Identity生成表单身份验证可以理解的身份验证cookie?

我认为在这两种情况下,cookie的内容都是序列化和加密的6Entre Ríos6Entre Ríos6Entre Ríos6Entre Ríos6Entre Ríos6Entre Ríos6Entre Ríos6Entre Ríos6Entre Ríos6Entre Ríos6Entre Ríos6Entre Ríos6Entre Ríos6Entre Ríos6Entre Ríos6Entre Ríos6Entre Ríos[{"prov":null},{"prov":null},{"prov":null},{"prov": null},{"prov":null},{"prov":null},{"prov":null},{" prov":null},{"prov":null},{"prov":null},{"prov":nu ll},{"prov":null},{"prov":null},{"prov":null},{"pr ov":null},{"prov":null},{"prov":null}] 所以看起来我的一大绊脚石就是让Forms Authentication应用程序和ASP.NET Identity应用程序都在关于加密/解密cookie的相同页面。由于Forms Authentication使用web.config文件中的ClaimsPrincipal元素加密cookie,而.NET Core中的ASP.NET Identity使用DPAPI,因此我必须弄清楚如何弥合这一差距。也许是这样的?

Startup.cs

<machineKey>

FormsAuthenticationDataProtector.cs

public void ConfigureServices(IServiceCollection services)
{
    ...

    services.Configure<IdentityOptions>(options =>
    {
        ...

        options.Cookies.ApplicationCookie.DataProtectionProvider = 
            new FormsAuthenticationDataProtector();

        ...
    });
}

但我不知道public class FormsAuthenticationDataProtector : IDataProtector { public IDataProtector CreateProtector(string purpose) { return this; } public byte[] Protect(byte[] plaintext) { // TODO: Mimic the Forms Authentication encryption algorithm. } public byte[] Unprotect(byte[] protectedData) { // TODO: Mimic the Forms Authentication decryption algorithm. } } Protect()方法的主体应该是什么。

1 个答案:

答案 0 :(得分:0)

This discussion我在GitHub上使用了几个ASP.NET身份和IdentityServer开发人员非常有帮助。关于在Forms身份验证和ASP.NET身份之间共享cookie的问题的简短回答是“#34;你疯了!&#34;幸运的是,有最低限度的选择。

布朗克艾伦指着我IdentityServer's GitHub repo for client examples。对我来说,我认为MvcFormPostClient example将会成功。在没有OWIN或ASP.NET身份的旧MVC应用程序中实现OpenID Connect实际上并不难。