带有MVC 5 .Net Framework客户端的IdentityServer 4已经使用ASP.Net Identity Framework

时间:2019-01-20 16:20:04

标签: c# asp.net-mvc asp.net-identity identityserver4 identityserver3

我有一个旧的ASP.Net MVC 5应用程序,该应用程序已经实现了Identity框架以将用户登录到网站。我们已经开始转向微服务架构,现在需要对对api的请求进行身份验证(api在.net核心中)。

我已经成功地创建了一个身份服务器,并将邮递员与 ResourceOwnerPasswordAndClientCredentials 流结合使用,可以创建jwt令牌,并在API上对用户进行身份验证,同时还可以提出权利要求。

mvc应用程序具有类似于airbnb的登录页面(登录表单是主页上的弹出窗口),因此将网站重定向到身份服务器确实不是一种选择。

问题是我应该使用什么流程?

我的客户端身份服务器中的客户端当前如下所示:

new Client
{
    ClientId = "ClientWebsite",
    ClientSecrets = new[] { new Secret("secret".Sha256()) },
    AllowedGrantTypes = GrantTypes.ResourceOwnerPasswordAndClientCredentials,
    AllowedScopes = new[] {
        "WebsiteAPI",
        IdentityServerConstants.StandardScopes.OpenId,
        IdentityServerConstants.StandardScopes.Profile,
        IdentityServerConstants.StandardScopes.Email
    }
},

客户网站上的所述,已经设置为使用Cookie身份验证进行身份验证,启动如下所示:

app.UseCookieAuthentication(new CookieAuthenticationOptions
{
    AuthenticationType = DefaultAuthenticationTypes.ApplicationCookie,
    LoginPath = new PathString(Settings.FormsAuthPath),
    Provider = new CookieAuthenticationProvider
    {
        OnValidateIdentity = SecurityStampValidator.OnValidateIdentity<ApplicationUserManager, ApplicationUser>(
            validateInterval: TimeSpan.FromMinutes(30),
            regenerateIdentity: (manager, user) => user.GenerateUserIdentityAsync(manager))
    }
});

我知道我需要在此之后添加一些内容。任何帮助将不胜感激。

1 个答案:

答案 0 :(得分:0)

由于您打算完全控制登录页面,因此我可以肯定地说,ResourceOwnerPassword流在正确的路径上。我不确定您为什么还要包括客户端凭据授予类型,但是用户身份验证不需要您指定的方式。

从到目前为止的内容来看,我建议确保实现资源所有者密码流所需的所有内容。此流程需要完成的主要工作是指定here的IResourceOwnerPasswordValidator接口的实现。之后,您应该可以直接向token endpoint“连接/令牌”发出请求。只要您在表单发布中指定了所有正确的字段(spec中所述的grant_type,用户名,密码和范围),就应该毫无问题地获得访问权限和ID令牌!