2013-04-23 20 views
15

Utworzono nowy projekt MVC4/.NET4.5 i włączono Google OpenID. To zadziałało, szokująco łatwo.Ograniczenie MVC4/Google OpenID do określonych domen Google Apps

Moja firma odeszła od Google, a nasze tożsamości domen/pracowników znajdują się w przestrzeni internetowej Google Apps.

W jaki sposób mogę zezwolić na uwierzytelnianie tylko mojej domeny Google Apps w mojej nowej witrynie internetowej? Mam nadzieję, że to prosta rzecz, taka jak uwierzytelnienie.

Oto kilka dodatkowych informacji:

  • dosłownie stworzył domyślną aplikację internetową i umożliwiła kawałek uwierzytelniania Google. Nie mogłem uwierzyć, jak łatwo było zweryfikować Google.
  • Moja firma ma dosłownie setki domen poczty e-mail, wszystkie zrolowane w ramach jednej domeny e-mailowej "parasol". Na przykład firmowa domena e-mail mojej firmy to "foo.com", ale pod tym adresem mamy "x.foo.com", "bar.com" i "yomommasougly.net". Wszystkie te elementy należą do domeny Google Apps "foo.com".
  • Ostatecznym celem jest opis, co należy zrobić (i gdzie), aby wziąć tę domyślną aplikację i ograniczyć ją do wszystkich domen w domenie "foo.com".
  • W przypadku setek domen i coraz częściej dodawanych, nie jest praktycznie możliwe jednoznaczne określenie każdej domeny.
+0

Brak chętnych, hę? Domyślam się, że to wcale nie takie proste. –

+2

Nie jest to bezpośrednia odpowiedź, ale część problemu może wynikać z używania dostawcy OpenID dostarczanego z MVC4. Możesz zamiast tego użyć mojego dostawcy [OAuth2] (https://github.com/mj1856/DotNetOpenAuth.GoogleOAuth2). Przynajmniej możesz zabezpieczyć go kluczem API i przekazać parametry zakresu. –

Odpowiedz

2

Zakładając, że używasz DotNetOpenAuth, sprawdź kod uwierzytelniający dla Stack Exchange Data Explorer.

Zasadniczo, po prostu poprosić o adres e-mail ze swoim życzenie:

request.AddExtension(
    new ClaimsRequest 
    { 
     Email = DemandLevel.Require, 
    } 
); 

następnie sprawdzić adres zwrócony przeciwko białej listy domeny (Zakładam, że jesteś już tylko akceptując google OpenIDs)

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

Zauważ, że te fragmenty kodu należy dodać do Twojego pliku web.config, aby uzyskać dokładny kod do pobierania wiadomości e-mail powyżej robocza:

<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:

przypadku korzystania OAuthWebSecurity coraz e-mail będzie po prostu wyglądać następująco:

var userDataFromProvider = result.ExtraData; 
var email = userDataFromProvider["email"]; 

Source

+0

Proszę zobaczyć moją aktualizację pytania. –

+0

Cóż, mogę uzyskać uwierzytelnienie * bez * użycia domeny Google Apps przy użyciu tego kodu w miejsce 'OpenAuth.AuthenticationClients.AddGoogle()' To jest ... coś. 'OpenAuth.AuthenticationClients.Add (" Google Apps ", (() => (IAuthenticationClient) nowy OpenIdClient (" przykład "," google.com/accounts/o8/site-xrds?hd=example.com "))); ' –

+0

Wspominam powyższy kod w przypadku, gdy moja domena Google Apps odmawia logowania, ponieważ jest skonfigurowana do ...Może działać dla kogoś, kto faktycznie ma dostęp do majsterkowania z ustawieniami :) –