【问题标题】:Using implicit flow to get Cookies使用隐式流获取 Cookie
【发布时间】:2016-11-29 07:16:43
【问题描述】:

使用IDServer3、OWIN、angular2、WebAPI等

我在 IDSrv 中设置了 2 个客户端,一个 MVC 和一个 JS/Angular,我正在尝试实现 SSO。目前,如果我通过 MVC 应用程序(混合流)登录,SSO 可以工作,因为这将在浏览器中设置 cookie,并且在我通过隐式流导航到登录时会被拾取。但是,如果我第一次尝试通过 JS 应用程序(隐式流)登录,则不会设置 cookie,因此不会实现 SSO。当我们通过隐式流和混合流登录时,如何配置 IDSrv 以设置 cookie?

编辑: 换句话说,是否可以同时使用 WebAPI 的承载令牌身份验证和 MVC 的 cookie 身份验证,并且仍然可以在两者之间实现 SSO。

编辑 2: 由于答案证实了我的理解,我将再次改写这个问题。在 JS(角度 2)客户端中使用隐式流,通过 IDSrv 中的 auth 端点进行身份验证时,如何获取令牌和 cookie?目前只返回一个令牌。

【问题讨论】:

    标签: cookies identityserver3


    【解决方案1】:

    是的 - 因为身份验证会话不是在 idsrv 和您的应用程序之间维护 - 而是在 idsrv 和您的浏览器之间。

    然后每个应用程序都必须设置自己的会话 - MVC 通过 cookie 来实现。在 JS 中通常使用会话存储之类的东西。

    浏览你的场景:

    1. 打开 MVC 应用

      • 使用 idsrv 进行身份验证。 idsrv 设置身份验证 cookie
      • 重定向回 mvc
      • MVC 设置自己的 cookie 来登录用户
    2. 打开 JS 应用

      • 使用 idsrv 进行身份验证。这次已经有一个现有的登录会话。不显示登录 UI,直接将令牌发送回 JS
      • JS 验证响应并记住本地存储中的用户

    每个客户端应用程序都需要自己的方式来登录用户(cookie 与会话存储)。发生单点登录是因为存在与 idsrv 的附加会话(由 idsrv 自己的 cookie 维护)。

    【讨论】:

    • 您能否解释一下会话存储如何解决通过隐式客户端首次登录时的 SSO 问题?当我们点击 MVC 客户端时,IDSrv 将如何获取它?
    • 或者我有一个误解...当我通过 MVC 客户端登录时,我看到的 cookie 是包含由 MVC 应用程序 owin 中间件或 IDSrv 生成的 ID_Token 吗?编辑:重新考虑它必须由 IDSrv 生成,因为它已签名......
    • 我添加了更多信息。如果这仍然不清楚,您需要阅读一些基础知识。
    猜你喜欢
    • 2019-08-03
    • 1970-01-01
    • 1970-01-01
    • 2020-05-13
    • 1970-01-01
    • 2014-12-14
    • 2016-04-06
    • 2021-06-13
    相关资源
    最近更新 更多