Identity Server 4 和 ASP.NET Core Identity

3
我正在开发的项目包括一个Web API、一个单页React应用程序和一个移动应用程序。用户需要在每个客户端中提供其用户名和密码才能访问Web API的受保护部分。我设置了一个Identity Server 4身份验证服务器,它使用我的自己实现的 IProfileService 和 IResourceOwnerPasswordValidator 接口,因为我使用的是ASP.NET Core Identity。这使得Identity Server可以访问ASP.NET Core Identity UserManager、RoleManager和SignInManagers,以确定所提供的用户名和密码是否有效。
我一直在使用“ResourceOwnerPassword”类型的授权类型。我还没有完全将授权整合到单页应用程序中,但我可以将用户的用户名和密码传递给身份验证服务器,生成一个令牌,然后将其添加到请求API的标头中。
由于我是新手,所以我对Identity Server和相关技术做了更多的研究。似乎使用ResourceOwnerPassword授权类型是不可取的。从我所了解的来看,我应该使用Implicit授权类型,但我不完全理解用户名和密码如何适用于该流程。有人对我应该使用哪种类型有什么见解吗?我描述的系统是否只能使用ResourceOwnerPassword授权类型?
1个回答

5
资源所有者密码授权类型在IdentityServer的文档中有以下说明:
资源所有者密码授权类型允许通过向令牌端点发送用户的名称和密码来代表用户请求令牌。这被称为“非交互式”身份验证,通常不推荐使用。对于某些传统或第一方集成场景,可能会有理由使用此授权类型,但一般建议使用诸如implicit或hybrid等交互式流进行用户身份验证。
(强调我的)。
其他所有流程都涉及重定向:用户单击您网站上的登录按钮,然后被重定向到标识服务器登录页面,他们在那里输入凭据,然后被重定向回您的原始网页。
例如,使用您的Google帐户登录其他网站也是相同的。例如,Google不希望您将该用户的名称和密码输入到自己的站点中,因为您可能会窃取它们,这通常是为什么不建议使用资源所有者密码授权类型的原因。但如果您正在进行第一方集成(即网站是您的,并且您信任用户在您的网站上输入密码),那么我不认为存在问题。
您应该阅读(并查看示例)其他流程/授权类型。它们肯定有其适用之处,我不会否认它们的用途,但如果您正在进行第一方集成,则做什么应该没问题。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接