我有一个旧的ASP.Net MVC 5应用程序,它已经实现了将用户登录到网站的Identity框架。我们已经开始转向微服务体系结构,现在需要验证对api的请求(api在.net核心中)。
我成功地创建了一个身份服务器,并使用具有ResourceOwnerPasswordAndClientCredentials流的poster创建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))
}
});
我知道我需要在这之后添加一些内容。如有任何帮助,我们将不胜感激。
由于您的目标是完全控制登录页面,我肯定会说您在ResourceOwnerPassword流方面走在了正确的道路上。我不知道您为什么也要包括客户端凭据授予类型,但对于您指定的用户身份验证方式,不需要它。
根据您迄今为止构建的内容,我建议确保资源所有者密码流所需的一切都已实现。这个流需要做的主要事情是实现这里指定的IResourceOwnerPasswordValidator接口。之后,您应该能够直接向令牌端点"connect/token"发出请求。只要您在表单帖子中指定了所有正确的字段(grant_type、用户名、密码和范围,如规范中所述),您就可以毫无问题地获得访问权限和id令牌!