首页 文章

如何使用IdentityServer3执行登录?

提问于
浏览
0

我正在开发一个与IdentityServer3一起使用的web api .

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

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

我知道令牌 endpoints 是:

https://myidservername/identity/connect/token

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

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

1 回答

  • 3

    IdentityServer是一个一体化的OpenID OAuth 2实现,因此隐式流完全由IdentityServer本身使用授权 endpoints 作为身份验证请求和令牌发出过程之间的桥梁来处理 .

    Implicit Flow的本质不允许Fiddler等客户端(更确切地说,不能直接呈现网页的客户端)进行身份验证 . 为了进一步理解为什么我将尝试在Web API / IdentityServer场景中重现OAuth隐式授权的步骤:

    • 客户端尝试访问受保护的资源 endpoints (例如,使用 Authorize 装饰的Web API控制器)

    • 框架通过验证令牌来检查用户是否通过身份验证(例如,检查 Authorization 标头并验证其内容)

    • 如果用户未经过身份验证,则框架将以401状态代码进行响应

    • 然后,客户端必须通过使用浏览器窗口转到授权 endpoints (例如,在移动应用程序中创建 WebView / UIWebView ,在浏览器中打开弹出窗口等)向Authorization Server(IdSrv3)请求令牌 .

    • 然后,用户插入其凭据,auth服务器验证它们,如果有效,则使用重定向进行响应,该重定向包括查询字符串内部(或散列后)的已颁发令牌

    • 客户端收到重定向响应并从URI中提取令牌

    • 客户端现在可以将经过身份验证的请求发送到资源服务器(Web API)

    正如您所看到的,您无法对无法在步骤4中返回的登录页面进行身份验证的客户端进行身份验证 . 对于这些客户端类型,流量可能是更好的解决方案 .

    您需要在IdentityServer配置中为您的客户端启用此类授权(您可以按照this tutorial查找方法),然后将 token endpoints 设置 grant_type 的请求设置为 passwordproviding all other required parameters .

相关问题