2016-07-25 55 views
0

使用IDServer3,OWIN,angular2,的WebAPI等使用隐式流量获取饼干

我有内IDSrv 2客户端安装程序,一个MVC和一个JS /角,我试图实现SSO。目前,如果我通过MVC应用程序(混合流程)登录,SSO将起作用,因为这将在浏览器中设置Cookie,并在我通过隐式流程导航到登录时被拾取。但是,如果我第一次尝试通过JS应用程序(隐式流)登录,没有设置cookie,因此没有实现SSO。当我们通过隐式流和混合流登录时,如何配置IDSrv来设置cookie?

编辑: 换句话说,是否有可能一起使用WebAPI的持票人令牌认证和MVC的Cookie认证,并且仍然是两者之间的共同SSO。

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

回答

2

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

然后,每个应用程序必须设置自己的会话 - MVC通过cookie来完成。 JS通常使用类似会话存储的东西。

要经过您的方案:

  1. 打开MVC应用程序

    • 与idsrv验证。 idsrv设置身份验证Cookie
    • 重定向回MVC
    • MVC将其自己的Cookie在用户
  2. 打开JS应用

    • 与idsrv验证签名。这一次已经有一个现有的登录会话。没有登录的用户界面显示和令牌发送回JS直接
    • JS验证响应并记住用户在本地存储

每个客户端应用程序需要以自己的方式在用户登录(饼干VS会议存储)。发生单点登录是因为有一个额外的idsrv会话(由idsrv自己的Cookie维护)。

+0

您能否解释一下当会话存储首次通过隐式客户端登录时如何解决SSO问题?当我们击中MVC客户端时,IDSrv会如何选择它? –

+0

或者我也有误解......当我通过MVC客户端登录时,我看到的cookie是否包含由MVC应用程序owin中间件或IDSrv生成的ID_Token?编辑:第二次以为它必须由IDSrv生成,因为它已签署... –

+0

我增加了更多信息。如果这还不清楚,你需要阅读一些基础知识。 – leastprivilege