如何使用IdentityServer3进行登录?

How to perform Sign-in with IdentityServer3?

我正在开发一个用于 IdentityServer3 的网络 api。

我有服务器和网络 api 运行,但我无法弄清楚如何让用户从移动应用程序登录到服务器。

我的问题是:如果我为身份服务器启用了隐式流,用户如何从 fiddler 等工具登录以在成功验证后接收他们的令牌?

我知道令牌端点是:

https://myidservername/identity/connect/token

我也知道授权endpoing是: https://myidservername/identity/connect/authorization

但是用户在哪里登录?我是否必须为用户创建自己的视图才能传递用户名和密码并接收令牌?更具体地说,我的问题是如何从 fiddler 登录,而不是从我必须呈现给用户的专用视图登录。

IdentityServer 是一个 all-in-one OpenID+OAuth 2 实现,因此隐式流程完全由 IdentityServer 本身使用 authorize 端点作为身份验证之间的桥梁来处理请求和令牌发行过程。

Implicit Flow 的性质不允许诸如 Fiddler 之类的客户端(更准确地说,是不能直接呈现网页的客户端)进行身份验证。 为了进一步理解为什么我会尝试在 Web API/IdentityServer 场景中重现 OAuth Implicit grant 的步骤:

  1. 客户端试图访问受保护的资源端点(例如,装饰有 Authorize 的 Web API 控制器)
  2. 框架检查用户是否通过验证令牌进行身份验证(例如检查 Authorization header 并验证其内容)
  3. 如果用户未通过身份验证,框架将返回 401 状态码
  4. 然后,客户端必须使用浏览器 window 访问授权端点,从而向授权服务器 (IdSrv3) 请求令牌(例如,在移动应用程序,在浏览器中打开 pop-up 等)
  5. 然后用户插入他的凭据,授权服务器对其进行验证,如果有效,则使用重定向进行响应,其中在查询字符串中(或在哈希之后)包含已发布的令牌
  6. 客户端收到重定向响应并从 URI 中提取令牌
  7. 客户端现在可以向资源服务器发送经过身份验证的请求(Web API)

如您所见,您无法验证无法固有地呈现步骤 4 中返回的登录页面的客户端。对于 class 的客户端 Resource Owner Credentials Flow 可能是更好的解决方案。

您需要在 IdentityServer 配置中为您的客户端启用此类授权(您可以按照 this tutorial to find out how), and then craft a request for the token endpoint setting grant_type to password and providing all other required parameters.