身份服务器 4 和 ASP.NET Core 身份

Sin*_*222 3 asp.net-core identityserver4 asp.net-core-identity

我正在处理的一个项目由一个 Web API、一个单页 React 应用程序和一个移动应用程序组成。从每个客户端,用户需要提供他们的用户名和密码才能访问 Web API 的受保护部分。我已经设置了一个 Identity Server 4 身份验证服务器,它使用我自己的IProfileServiceIResourceOwnerPasswordValidator接口实现,因为我使用的是 ASP.NET Core Identity。这允许 Identity Server 访问 ASP.NET Core Identity UserManagerRoleManagerSignInManagers以确定提供的用户名和密码是否有效。

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

我对身份服务器和相关技术进行了更多研究,因为我对这一切都不熟悉。使用 ResourceOwnerPassword 授权类型似乎是不可取的。据我所知,似乎我应该使用隐式授权类型,但我不完全了解用户名和密码如何适应该流程。有没有人知道我应该使用哪种类型?我描述的系统是否只能使用ResourceOwnerPassword授权类型?

Mas*_*ton 5

资源所有者密码授予类型在 IdentityServer 文档中对此进行了说明:

资源所有者密码授予类型允许通过将用户名和密码发送到令牌端点来代表用户请求令牌。这就是所谓的“非交互式”身份验证,通常不推荐使用。

某些遗留或第一方集成方案可能有原因,这种授权类型很有用,但一般建议是使用诸如隐式或混合之类的交互式流来代替用户身份验证。

(重点是我的)

所有其他流程都涉及重定向:用户在您的网站上单击登录并被重定向到身份服务器登录页面,他们在那里输入他们的凭据,然后被重定向回您的原始网页。

例如,使用您的 Google 帐户登录其他网站时也是如此。Google 不希望您将该用户名和密码输入您自己的站点,因为您可能会窃取它们,这通常是不鼓励使用资源所有者密码授予类型的原因。但是,如果您正在进行第一方集成(即该网站是您的,并且您信任用户在您的网站上输入密码),那么我看不出问题出在哪里。

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