Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/318.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 多站点登录,只需一个;护照;_C#_Asp.net_Api_Oauth_Openid - Fatal编程技术网

C# 多站点登录,只需一个;护照;

C# 多站点登录,只需一个;护照;,c#,asp.net,api,oauth,openid,C#,Asp.net,Api,Oauth,Openid,我有3个ASP.NET MVC网站在SQL Server上运行实体框架。每个站点都作为一个独立的应用程序运行,具有独立的数据库。我想让商业客户能够创建“Passports”又名令牌,允许他们登录到一个站点,同时登录到其他站点。为了登录站点,passport必须具有通过passport系统颁发的有效“Visa”,passport可以通过passport站点管理器进行管理,管理员可以使用passport站点管理器从网站a、B和C访问用户帐户信息,并执行管理工作。从某种意义上说,护照可以被认为与人们的

我有3个ASP.NET MVC网站在SQL Server上运行实体框架。每个站点都作为一个独立的应用程序运行,具有独立的数据库。我想让商业客户能够创建“Passports”又名令牌,允许他们登录到一个站点,同时登录到其他站点。为了登录站点,passport必须具有通过passport系统颁发的有效“Visa”,passport可以通过passport站点管理器进行管理,管理员可以使用passport站点管理器从网站a、B和C访问用户帐户信息,并执行管理工作。从某种意义上说,护照可以被认为与人们的真实身份一一对应

以下是我的问题,我如何从站点a传递用户登录尝试以检查passport数据库,并将结果返回到站点a?我如何隐藏这种交流?换句话说,只有网站应用程序A、B、C可以检查passport数据库的登录尝试?是否应该有其他应用程序提供该接口?它会是一个ASP.NET Web API吗

我问题的第二部分,一旦用户登录到站点a,他们就不必重新键入他们的凭据来进入站点B和C。相反,在登录到站点a时,他们会创建与站点B和C的会话,或者生成一个密钥来授权与站点B和C的会话。这个过程是什么样的


我不是在寻找一个完整的解决方案,但如果你能给我举个例子,看看我认为有用的技术/库/对象的文档。

你要找的内容可以在中找到。浏览一下网站上的开发者工具包,你想要的东西很容易就完成了

您的“Passport站点”称为安全令牌服务(STS)。网站A、B和C称为依赖方(RP)。考虑一个使用ADFS 2.0实现STS的简单案例(所有用户都在Active Directory中维护)。Windows身份基础(WIF)具有ASP.NET认证模块,可以通过AMFS 2在SAML上工作。STS以“声明”的形式表示用户信息,并使用所有声明创建一个X509签名令牌,并将其作为cookie提供给用户。RPs可以读取令牌、验证签名并将声明用于身份验证和授权目的

样本流解释如下:

a。用户首次访问的网站A

  • WIF模块检查Cookie是否有有效令牌。由于用户尚未登录,因此没有令牌
  • WIF使用一个特殊的URL将用户浏览器的HTTP重定向到STS站点,该URL传达了用户的意图(登录/注销、RP名称等)
  • STS站点检查令牌,由于令牌不存在,因此显示登录页面
  • 用户登录并获得带有用户声明的令牌。还有一个特定于给定RP名称的第二个令牌(这表示RP的登录)。STS重定向回请求RP
  • 网站A上的WIF模块现在可以识别令牌并将其用于AuthN和AuthZ
  • b。现在考虑用户访问网站B.

  • WIF模块检查有效令牌。因为它不存在,所以没有代币
  • WIF使用不同的参数再次将HTTP重定向到STS(RP已更改)
  • STS检查登录令牌。因为用户已经登录,所以它是存在的
  • STS为网站B创建令牌并重定向回网站B
  • 网站B WIF模块识别令牌并将其用于AuthN和AuthZ
  • 用户不必使用其用户名和密码再次登录

    该系统的复杂性在于处理单个站点的注销以及跨多个RPs通信用户的注销。由于整个系统依赖于SSL证书,因此还需要维护正确的SSL证书

    有些情况下还有一个“主动”场景(我描述的场景是“被动”的,浏览器执行所有的运行),程序员必须对重定向进行编码