oidc-client-js和基本身份验证

时间:2017-06-09 12:26:57

标签: asp.net-core basic-authentication identityserver4 oidc-client-js

方案

  • 带有IdentityServerAuthentication的ASP.NET核心MVC(API),带有oidc-client-js的Angular 2。 IdentityServer4,带有ASP.NET核心标识,作为OP。使用Kestrel
  • nginx反向代理 - SSL终止,基本身份验证
  • oidc Implicit Flow

身份验证流程如下:

  1. 浏览器导航到应用
  2. 浏览器中的基本身份验证
  3. Angular route guard notices(通过oidc-client)用户未登录(或401被抓住)
  4. App导航至unauthorized路线
  5. 用户点击sign in按钮,触发UserManager(oidc-client)signinRedirect
  6. 浏览器重定向到OP(IdentityServer4)
  7. 用户登录OP
  8. 重定向到app signin-callback - 即UserManager signinRedirectCallback
  9. 基本身份验证弹出窗口 - 因为oidc-client使用Bearer授权标头调用connect/userinfo
  10. 问题

    用户现在停留在第9步。呼叫永远不会使用基本身份验证标头(或者更确切地说:两个标头组合在一起)。用户只能取消,然后在请求时向userinfo端点发出401,让他们在应用程序中注销。

    重复尝试将跳过步骤5,因为OP登录的会话cookie仍然存在。

    我不完全确定浏览器如何处理基本身份验证,尤其是对于从js / angular发出的请求。这可能是oidc-client-js中的错误吗?

    我猜我们的应用程序经过身份验证的HTTP请求必须检查是否已有授权并向其添加承载令牌(逗号分隔的授权标头,但只有一个此类标头)。如果尚未发送授权标头,我们已经附加了带有承载令牌的Authorization标头 - 但是我无法真正尝试这一点,因为这种情况甚至不能进行足够的远程来进行这样的api调用。

    未设置基本身份验证时,一切正常

    我在开发期间使用本地nginx来测试HTTPS重定向,检测SSL终止 - 以及添加基本身份验证时的行为。

    没有基本身份验证,一切正常。正确解释X-Forwarded-ForX-Forwarded-Proto标头,将HTTP重定向到HTTPS等。

    为什么甚至需要基本身份验证?

    我们不希望公开申请。最近添加了基于OIDC的身份验证,以及强制执行HTTPS等(应用程序尚未投入生产)

0 个答案:

没有答案