使用 username/password 通过 Javascript 直接从 IdentityServer3 请求令牌

Requesting token directly from IdentityServer3 via Javascript using username/password

我正在尝试使用 IdentityServer3,但 none 的流程似乎符合我想要完成的任务

  1. 仅在 HTML 和 Javascript 中编写的单页应用程序 (SPA) 尝试访问受保护的 API 端点(ASP.NET Web API v2 in这种情况)。
  2. 返回 HTTP 401,因为 API 端点受到保护
  3. SPA 直接从传递用户名和密码的 IdentityServer 请求令牌
  4. IdentityServer3 传回授权令牌,其中包括用户名和与用户名关联的声明
  5. SPA 再次尝试访问 API 端点,但在 header 中传递了承载令牌并被允许访问
  6. 最后,我想实现刷新令牌,这样 SPA 就不必再次提交用户名和密码。

我看过的流量:

隐式流 - 涉及到 IdentityServer 的重定向,作为验证发出请求者身份的一种方式。我想直接使用 IdentityServer 进行身份验证。同样在登录后使用 IdentityServer3,页面会显示一个同意页面,询问用户是否要共享此信息。由于这是仅适用于有问题的 API 的内部登录,这似乎不合适。

资源所有者流程 - 我的理解是此流程需要 client_secret,这在 SPA

中是不可能保密的

也许我使这比需要的更复杂,但我发现的示例中 none 似乎遵循我上面概述的步骤。可以使用 IdentityServer3 吗?

如果客户端应用程序收集了 username/password,那么您正在使用资源所有者密码流。但是通过使用该流程,您会错过单点登录和您在 IdentityServer 中编写的任何其他登录工作流功能。

推荐的方法是重定向到 IdentityServer 的隐式流。可以禁用 IdentityServer 显示的同意屏幕(这是针对每个客户端的配置设置)。