Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-mvc/15.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
Asp.net mvc 使用MVC对Google Apps OpenID进行DotNetOpenAuth身份验证_Asp.net Mvc_Dotnetopenauth - Fatal编程技术网

Asp.net mvc 使用MVC对Google Apps OpenID进行DotNetOpenAuth身份验证

Asp.net mvc 使用MVC对Google Apps OpenID进行DotNetOpenAuth身份验证,asp.net-mvc,dotnetopenauth,Asp.net Mvc,Dotnetopenauth,我正在尝试单点登录。目前,最可行的解决方案是用户输入我网站上的详细信息,然后发送到goggle应用程序进行验证 我正在使用dotnetopenauth发送和接收请求 这意味着,如果存在谷歌应用程序登录cookie,它将不考虑这些cookie 已经有几个问题涉及到这一点。但似乎没有人能回答这个问题 这是当前代码(请注意,我限制了可能用于我的域的google应用程序的域): 此代码与正常模式之间的唯一区别是以下几行: openid.DiscoveryServices.Clear();

我正在尝试单点登录。目前,最可行的解决方案是用户输入我网站上的详细信息,然后发送到goggle应用程序进行验证

我正在使用dotnetopenauth发送和接收请求

这意味着,如果存在谷歌应用程序登录cookie,它将不考虑这些cookie

已经有几个问题涉及到这一点。但似乎没有人能回答这个问题

这是当前代码(请注意,我限制了可能用于我的域的google应用程序的域):

此代码与正常模式之间的唯一区别是以下几行:

openid.DiscoveryServices.Clear();
        openid.DiscoveryServices.Insert(0, GoogleAppsDiscovery); // it should be first if we don't clear the other discovery services
这些行正确设置OpenId以处理来自google应用程序的响应

正如我所说,只有当用户首先输入他/她的电子邮件地址时,这才有效。我找不到自动重定向到谷歌应用程序登录的方法

在普通的gmail中,如果我将用户发送到:而不是处理输入,谷歌将把用户输入的登录详细信息放在他们的网站上,而不是我的网站上。如果有cookie,它会跳过这一步,并将用户直接返回到我的站点,而不必大惊小怪

我希望我的网站在谷歌应用程序登录时也有同样的行为

此外,如果我能将登录限制到我的谷歌应用程序域,那就太好了

有两个URL四处浮动:

但即使有我前面指出的代码行,dontnetopenauth也拒绝在任一地址看到openid端点

甚至dotnetaopenauth for webforms中的示例也需要用户输入


任何帮助都将不胜感激。

您不能没有用户输入,也不能让任何谷歌应用程序域为用户工作,因为用户可能会登录到15个谷歌应用程序域帐户,然后没有人知道用户要使用哪个帐户登录

但既然你说你希望他们只能用你自己的域名登录,那就简单了。跳过询问用户,假装“example.com”是用户输入,并将其传递到DotNetOpenAuth。它不必是电子邮件地址。无论如何,只使用域名

也就是说,这并不保证其他提供商或域的任何人都不能登录您的站点。为此,您需要过滤返回的
iaauthenticationresponse
,并确保其
Provider
属性与您想要允许的值匹配。否则,“未经请求的断言”仍然会出现

openid.DiscoveryServices.Clear();
        openid.DiscoveryServices.Insert(0, GoogleAppsDiscovery); // it should be first if we don't clear the other discovery services