2017-03-06 141 views
2

我正在开发的一个项目包含一个Web API,一个单独的页面反应应用程序和一个移动应用程序。从每个客户端,用户需要提供他们的用户名和密码才能访问Web API的受保护部分。我设置了Identity Server 4身份验证服务器,该服务器使用我自己的IProfileServiceIResourceOwnerPasswordValidator接口,因为我使用的是ASP.NET Core Identity。这允许Identity Server访问ASP.NET Core Identity UserManager,RoleManagerSignInManagers以确定提供的用户名和密码是否有效。Identity Server 4和ASP.NET Core Identity

我一直在使用的授予类型是“ResourceOwnerPassword”类型。我还没有完全将授权集成到单页面应用程序中,但是我可以将用户的用户名和密码传递给身份服务器,并且会生成一个令牌,以便将其添加到API请求的标题中。

我已经做了关于Identity Server和相关技术的更多研究,因为我对所有这些都是新手。似乎不希望使用ResourceOwnerPassword授权类型。从我可以告诉它看起来应该使用隐式授权类型,但我不完全理解用户名和密码如何适应该流。有没有人有任何洞察到我应该使用哪种类型?我所描述的系统只能使用ResourceOwnerPassword授权类型吗?

回答

4

资源所有者密码交付式了这本关于它的IdentityServer文档:

资源所有者密码交付式可通过发送用户名和密码,以请求对 代表用户令牌标记 端点。这就是所谓的“非交互式”认证,一般不建议使用 。

有可能是为特定的旧或第一方整合 场景,在这笔款项的类型是非常有用的原因,但一般 建议是使用像隐含的交互式流或混合 用户身份验证。

(重点是我的)

所有其他流量包括重定向:用户点击登录你的网站,会被重定向到一个身份的服务器登录页面,相反,他们有进入他们的凭据,然后重定向回您的原始网页。

例如,使用您的Google帐户登录其他网站也是如此。谷歌不希望你输入用户名和密码到你自己的站点,因为你可以窃取它们,这就是为什么资源所有者密码授权类型不鼓励的原因。 但是,如果您正在进行第一方整合(即网站是您的,并且您相信自己的用户在您的网站上输入密码),那么我不会看到问题所在。

您应该阅读(并查看示例)其他流/授权类型。他们肯定有自己的位置,我并没有解雇他们,但如果你正在进行第一方整合,那么做什么应该没问题。