Ответ 1
Предполагая, что вы используете DotNetOpenAuth, проверьте код аутентификации для Stack Exchange Data Explorer.
По сути, вы просто запрашиваете адрес электронной почты с запросом:
request.AddExtension(
new ClaimsRequest
{
Email = DemandLevel.Require,
}
);
Затем проверьте возвращаемый адрес на свой белый список (я предполагаю, что вы уже принимаете OpenIDs google)
var sreg = response.GetExtension<ClaimsResponse>();
If (!HasWhiteListedDomain(sreg.Email)) {
// Fail Here
}
Обратите внимание, что эти биты кода необходимо добавить в ваш 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>
Edit:
Если использование OAuthWebSecurity
получения электронной почты будет выглядеть примерно так:
var userDataFromProvider = result.ExtraData;
var email = userDataFromProvider["email"];