如何让两个网站针对 Thinktecture 的身份服务器进行身份验证?



在查看了关于身份和访问控制的PluralSite视频后,基本上得到了我需要的一切(我在我的机器上有一个正在运行的Thinktecture身份服务器的本地实例,以及Identity和Access vs2012扩展),我无法在同一解决方案中获得两个web应用程序来对身份服务器进行身份验证。

目前,他们都要求我登录到id服务器,这不是我想要的,我希望能够登录到id服务器一次,并为两个站点进行认证。

这是网络的部分。我认为这决定了它应该如何运行:

"real "的作用到底是什么?这是否需要是一个真正的URL,或者可以将其视为名称空间?当试图在多个站点上使用Id服务器颁发的相同安全令牌时,我想象的领域必须发挥作用。

<system.identityModel.services>
<federationConfiguration>
<cookieHandler requireSsl="false" />
<wsFederation passiveRedirectEnabled="true" issuer="https://MyIdServer.com/idsvr/issue/wsfed" realm="http://MyLocalServerRunningIISExpress:55495/" reply="http://MyLocalServerRunningIISExpress:55495/" requireHttps="false" />
</federationConfiguration>
</system.identityModel.services>

audienceUris是如何工作的?我假设,如果我想在多个站点上使用一个安全令牌,我需要在audienceUris部分中表示每个站点的URL。

<system.identityModel>
<identityConfiguration>
<claimsAuthenticationManager type="SSO.Security.ClaimsAuthenticationManager, SSO.Security" />      
<audienceUris>
<add value="http://MyLocalServerRunningIISExpress:55495/" />
<add value="http://MyLocalServerRunningIISExpress:53133/" />
</audienceUris>
</identityConfiguration>
</system.identityModel>

另一个web。第二个站点的配置文件就像上面的部分一样,但是在URL上更改了端口号。

再次,我确实有Id Srv传递回令牌给我,对我进行一个站点的身份验证,但我不能为我的生命让它为两个工作。

我猜这是一个配置问题,或者可能是我在两个端口号上运行两个IIS快速实例,而不是让一个真正的IIS服务器参与并使用URL代替的事实?

您尝试过FederatedSignOut吗?

WSFederationAuthenticationModule am = FederatedAuthentication.WSFederationAuthenticationModule;
WSFederationAuthenticationModule.FederatedSignOut(new Uri(am.Issuer), new Uri(am.Realm));

我知道这是WIF 1.0,但在WIF 4.5中应该有类似的东西

nzpcmad,下面是4.5的类似内容:

var authModule = FederatedAuthentication.WSFederationAuthenticationModule;
authModule.SignOut(false);
var signOutRequestMessage = new SignOutRequestMessage(new Uri(authModule.Issuer), authModule.Realm);
var queryString = signOutRequestMessage.WriteQueryString();
return new RedirectResult(queryString);

我认为这里的问题与Thinktecture Id Svr发布cookie的方式有关,该cookie应该跟踪哪些依赖方被认证。由于某种原因,包含经过身份验证的RP的cookie似乎直到收到注销请求才发出,而我认为应该在收到登录请求时发出该cookie ?

其他一些人也有同样的问题,并且在GitHub上有一个打开的票:https://github.com/thinktecture/Thinktecture.IdentityServer.v2/issues/197

好的,显然,你必须选中"记住我"复选框,以便cookie传播到其他网站。所以,本质上,这是可行的。然而,我仍然不能做的是正确注销。同样,要下线的网站正在清除自己的cookie,然后处理STS cookie,但另一个网站仍在登录。

在STS服务器注销页面中,源视图有:

<iframe style="visibility: hidden; width: 1px; height: 1px" src="http://MyServer:55495/?wa=wsignoutcleanup1.0"></iframe>

但是由于目前有两个网站登录,我应该在这里看到两个条目,所以这个页面也可以清理cookie。

这是我的注销代码:

var authModule = FederatedAuthentication.WSFederationAuthenticationModule;
//clear local cookie
authModule.SignOut(false);
//initiate federated sign out request to the STS
var signOutRequestMessage = new SignOutRequestMessage(new Uri(authModule.Issuer), authModule.Realm);
var queryString = signOutRequestMessage.WriteQueryString();
return new RedirectResult(queryString);

我相信这段代码是正确的,但我想问题是STS服务器没有跟踪哪些依赖方登录,需要销毁他们的cookie ?

在cookie处理程序中,您应该指定name, domain(可能还有path)。这些在所有使用这个的网站上必须是相等的。

<system.identityModel.services>
  <federationConfiguration>
    <cookieHandler requireSsl="false" 
       name="myCookieName" domain="MyLocalServerRunningIISExpress" path="/"/>
    <wsFederation passiveRedirectEnabled="true" requireHttps="false" 
       issuer="https://MyIdServer.com/idsvr/issue/wsfed" 
       realm="http://MyLocalServerRunningIISExpress:55495/" />
  </federationConfiguration>
</system.identityModel.services>

我不确定使用不同端口号的设置是如何工作的。我的设置是标准的IIS,两个站点作为应用程序在同一根目录下运行。

另一个设置我知道工作是有两个网站设置与域名的最后一部分共同。这是网站有URL: site1.mydomain.comsite2.mydomain.com。则将<cookieHandler>中的domain参数设置为mydomain.com

是的,所有的网站都必须在<audienceUris>中列出,就像你已经在你的例子中一样。

注意:
replyrealm url相同时,不需要严格设置reply参数

相关内容

  • 没有找到相关文章

最新更新