针对特定Google Apps域的MVC4/Google OpenID限制

Jer*_*acs 15 c# openid asp.net-mvc simplemembership

我创建了一个新的MVC4/.NET4.5项目并启用了Google OpenID.这非常容易.

我的公司已经"google",我们的域/员工身份在Google Apps网站空间中.

如何才允许我们的Google Apps域对我的新网站进行身份验证?我希望这是一个简单的事情,如认证片.

以下是一些其他信息:

  • 我确实创建了一个默认的Web应用程序并启用了Google身份验证部分.我无法相信对Google进行验证是多么简单.
  • 我的公司有数百个电子邮件域名,所有这些域名都汇集在一个电子邮件域"伞"下.例如,我公司的公司电子邮件域名是"foo.com",但在此我们有"x.foo.com","bar.com"和"yomommasougly.net".所有这些都是"foo.com"Google Apps域的一部分.
  • 最终目标是描述需要做什么(以及在何处)采用此默认应用程序并将其限制在"foo.com"域下的所有域.
  • 由于有数百个域,并且一直在添加更多域,因此明确指定每个域是不切实际的.

Kev*_*ker 2

假设您正在使用 DotNetOpenAuth,请检查Stack Exchange Data Explorer的身份验证代码。

本质上,您只需在请求中询问电子邮件地址即可:

request.AddExtension(
    new ClaimsRequest
    {
        Email = DemandLevel.Require,
    }
);
Run Code Online (Sandbox Code Playgroud)

然后根据您的域白名单检查返回的地址(我假设您已经只接受 google OpenID)

var sreg = response.GetExtension<ClaimsResponse>();
If (!HasWhiteListedDomain(sreg.Email)) { 
    // Fail Here
}
Run Code Online (Sandbox Code Playgroud)

请注意,需要将这些代码添加到您的 Web.config 中,以获得用于获取上述工作的电子邮件的确切代码:

  <configSections>
    <section name="dotNetOpenAuth" type="DotNetOpenAuth.Configuration.DotNetOpenAuthSection" requirePermission="false" allowLocation="true" />
  </configSections>
  <dotNetOpenAuth>
    <openid>
      <relyingParty>
        <behaviors>
          <!-- The following OPTIONAL behavior allows RPs to use SREG only, but be compatible
                    with OPs that use Attribute Exchange (in various formats). -->
          <add type="DotNetOpenAuth.OpenId.Behaviors.AXFetchAsSregTransform, DotNetOpenAuth" />
        </behaviors>
      </relyingParty>
    </openid>
  </dotNetOpenAuth>
Run Code Online (Sandbox Code Playgroud)

编辑:

如果使用OAuthWebSecurity获取电子邮件将看起来像这样:

var userDataFromProvider = result.ExtraData;
var email = userDataFromProvider["email"];
Run Code Online (Sandbox Code Playgroud)

来源