使用DotNetOpenId与Google Apps进行问题

时间:2011-10-11 07:46:02

标签: .net openid dotnetopenauth assertion

我处于危急的境地,因为我们必须将Google Apps支持集成到我们的应用程序中,该应用程序位于.Net 2.0框架中。所以对于这个我使用DotNetOpenId v2.5.7。早些时候,为了实现这一目标,我们使用DotNetOpenAuth v3.4.6在框架4.0中创建了一个单独的应用程序,该应用程序将使用Google Apps进行身份验证,并使用所有信息重定向数据。但是这个过程有安全漏洞。所以现在我们必然会使用DotNetOpenId,因为我们的应用程序无法迁移到更高的框架。

主要问题是与Google Apps一起使用时。它适用于将OpenId Endpoint作为 https://www.google.com/accounts/o8/ud 的Gmail帐户。但是,当OpenId Endpoint是这样的 https://www.google.com/a/example.com/o8/ud?be=o8 时,它会给我一个断言错误。该应用程序将用户正确地重定向到Google Apps登录页面。但当它返回数据时,身份验证状态失败,以下是其中的例外:

Message: The OpenId Provider issued an assertion for an Identifier whose discovery information did not match.

Assertion endpoint info: 
ClaimedIdentifier: http://example.com/openid?id=11......010 
ProviderLocalIdentifier: http://example.com/openid?id=11......010 
ProviderEndpoint: https://www.google.com/a/example.com/o8/ud?be=o8 
OpenID version: 2.0 
Service Type URIs: (unavailable) 

Discovered endpoint info: 
{ClaimedIdentifier: http://specs.openid.net/auth/2.0/identifier_select 
ProviderLocalIdentifier: http://specs.openid.net/auth/2.0/identifier_select 
ProviderEndpoint: https://www.google.com/a/example.com/o8/ud?be=o8 
OpenID version: 2.0 
Service Type URIs: http://specs.openid.net/auth/2.0/server, }

我已经放置了一个XRDS文件,可以在此位置下载 http://example.com/openid ,其中的数据如下

<?xml version="1.0" encoding="UTF-8"?>
<xrds:XRDS xmlns:xrds="xri://$xrds" xmlns="xri://$xrd*($v*2.0)">
    <XRD>
        <Service priority="0">
            <Type>http://specs.openid.net/auth/2.0/server</Type>
            <URI>https://www.google.com/a/example.com/o8/ud?be=o8</URI>
        </Service>
        <Service priority="10">
            <Type>http://specs.openid.net/auth/2.0/signon</Type>
            <URI>https://www.google.com/a/example.com/o8/ud?be=o8</URI>
        </Service>
    </XRD>
</xrds:XRDS>

但这也无济于事。

我还在 http://example.com/.well-known/host-meta 位置放置了一个文件,其中包含以下内容:

Link: <https://www.google.com/accounts/o8/site-xrds?hd=example.com>; rel="describedby http://reltype.google.com/openid/xrd-op"; type="application/xrds+xml"

请告诉我还有什么需要做的。我几天来一直在浏览论坛并使用谷歌解决这个问题,但没有进展。

1 个答案:

答案 0 :(得分:0)

你是正确的,因为DotNetOpenId v2.x以.NET 2.0为目标。它无法通过其Google Apps OpenID登录用户,因为Google Apps不遵循OpenID协议,而是Google自己的变体。

DotNetOpenAuth v3.x的插件方式允许Google Apps通过激活对其OpenID变体的支持来工作。

我认为最有帮助的是知道DotNetOpenAuth 需要.NET 4.0。只需安装.NET 3.5,这是一个针对.NET 2.0的低影响就地更新。您的网站应该继续正常运行,但DotNetOpenAuth v3.x可以使用它。