我有一个旧的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))
}
});
我知道我需要在此之后添加一些内容。任何帮助将不胜感激。
答案 0 :(得分:0)
由于您打算完全控制登录页面,因此我可以肯定地说,ResourceOwnerPassword流在正确的路径上。我不确定您为什么还要包括客户端凭据授予类型,但是用户身份验证不需要您指定的方式。
从到目前为止的内容来看,我建议确保实现资源所有者密码流所需的所有内容。此流程需要完成的主要工作是指定here的IResourceOwnerPasswordValidator接口的实现。之后,您应该可以直接向token endpoint“连接/令牌”发出请求。只要您在表单发布中指定了所有正确的字段(spec中所述的grant_type,用户名,密码和范围),就应该毫无问题地获得访问权限和ID令牌!