【问题标题】:"Remember this approval" when using dotNetOpenAuth and Google Apps doesn't work as expected使用 dotNetOpenAuth 时“记住此批准”且 Google Apps 无法按预期工作
【发布时间】:2012-06-28 17:18:12
【问题描述】:

我正在使用 dotNetOpenAuth 通过用户的 Google Apps 帐户向我的应用程序提供 SSO。除了简单的身份验证之外,我还要求 Google 返回用户的电子邮件、名字和姓氏。当用户第一次进入时,他们会被重定向到典型的 Google 帐户页面,告诉他们该应用正在询问此信息并且他们是否希望允许它。那里有一个复选框来记住这个批准。问题是,批准没有被记住。如果他们在不关闭浏览器的情况下返回网站,它会记住他们。但如果他们关闭浏览器,稍后再打开并重新进入,系统会再次提示他们允许浏览器。

如果我查看显示已连接网站、应用和服务的 Google 帐户页面,我会看到我的应用被多次列出。就好像它不承认它是同一个应用程序并不断添加它。

我知道我一定遗漏了一些明显的东西,但我不确定它是什么。有什么想法吗?

谢谢!

你可以找到我的代码here

【问题讨论】:

    标签: oauth-2.0 dotnetopenauth google-apps


    【解决方案1】:

    我在您的代码中发现了几个问题。首先回答您的直接问题,Google 在回访时不记得您的原因是因为您每次登录时都会将随机 GUID 作为您的领域的一部分传入。症状实际上比您意识到的要严重得多。不仅 Google 会在用户回访时提示用户,您的网站在回访时根本无法识别用户,因为 Google 会给他们一个声明的标识符访问。

    解决方法是您应该为每个登录请求使用完全相同的 Realm:

    Realm realm = "http://www.yoursite.com/";
    var req = openid.CreateRequest(discoveryUri, realm, URIbuilder.Uri );
    

    或者我个人最喜欢的:

    var req = openid.CreateRequest(discoveryUri, Realm.AutoDetect, URIbuilder.Uri );
    

    Realm.AutoDetect 将为您工作,除非您的网站同时可通过 HTTP 和 HTTPS 访问,在这种情况下,您需要将其锁定为其中之一,以便 Google 识别您的网站一如既往。

    您还必须记住,作为第三个参数传递给CreateRequest 的 returnTo URL 必须始终基于领域。因此,如果您的领域是 HTTPS,那么您的 returnTo 参数也必须是。

    我还想指出,您似乎有一些 GUID 代码和复杂的 URL 操作,试图确保您接受的每个 OpenID 响应都来自您发出的请求。我不确定您为什么首先尝试这样做,尽管肯定有正当的理由。你这样做的方式是不安全的,可以被规避。我建议您删除所有这些代码,以便将其添加到您的 web.config 文件中:

    <dotNetOpenAuth>
        <openid>
            <relyingParty>
                <security rejectUnsolicitedAssertions="true" />
            </relyingParty>
        </openid>
    </dotNetOpenAuth>
    

    该库支持要求所有响应都来自您的内置请求,并且这样做是安全的,因此我之前提到的安全漏洞是不可能的。

    但是,如果您只是想应用此限制以便知道它来自 Google,我是否建议您不要拒绝未经请求的断言,而是在收到响应时检查 IAuthenticationResponse.Provider.Uri 属性并验证它是来自 Google OP Endpoint?然后,如果 Google 曾经支持发送未经请求的断言,它将在您的网站上运行,最终您的安全门正是您想要的位置。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-12-12
      • 1970-01-01
      • 1970-01-01
      • 2012-03-06
      • 1970-01-01
      • 1970-01-01
      • 2016-09-01
      相关资源
      最近更新 更多