Ограничение MVC4/Google OpenID для определенных доменов (ов) Google Apps

Я создал новый проект MVC4/.NET4.5 и включил Google OpenID. Это сработало, отвратительно легко.

Моя компания "go google" и наши имена доменов/сотрудников находятся в веб-пространстве Google Apps.

Как я могу разрешить только нашим доменам Google Apps проходить проверку подлинности на моем новом веб-сайте? Я надеюсь, что это простая вещь, как часть аутентификации.

Ниже приведена дополнительная информация:

  • Я буквально создал веб-приложение по умолчанию и включил часть проверки подлинности Google. Я не мог поверить, насколько просто было проверять Google.
  • У моей компании буквально сотни доменов электронной почты, все они свернуты под одним доменом "зонтик" электронной почты. Например, доменное имя моей корпоративной электронной почты "foo.com" , но под этим мы имеем "x.foo.com", "bar.com" и "yomommasougly.net". Все они являются частью домена Google Apps "foo.com" .
  • Конечной целью является описание того, что необходимо сделать (и где), чтобы принять это приложение по умолчанию и ограничить его для всех доменов в домене "foo.com" .
  • С сотнями доменов, и все больше добавляется все время, нецелесообразно явно указывать каждый домен.

Ответы

Ответ 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"];

Источник