udało mi się wdrożyć to w następujący sposób:
Pierwszy, dodając odniesienie do pakietu Microsoft.Owin.Security.OpenIdConnect
Nuget.
drugie, konfigurowania go w moim Startup.Auth.cs
:
app.UseOpenIdConnectAuthentication(new OpenIdConnectAuthenticationOptions
{
ClientId = "From the Azure Portal (see below)",
Authority = "https://login.windows.net/<domain>.onmicrosoft.com",
Notifications = new OpenIdConnectAuthenticationNotifications
{
RedirectToIdentityProvider = (ctx) =>
{
if (ctx.Request.Path.Value.EndsWith("ExternalLogin"))
{
string appBasePathUrl = ctx.Request.Scheme + "://" + ctx.Request.Host + ctx.Request.PathBase;
ctx.ProtocolMessage.RedirectUri = appBasePathUrl + "/";
ctx.ProtocolMessage.PostLogoutRedirectUri = appBasePathUrl;
}
else
{
ctx.State = NotificationResultState.Skipped;
ctx.HandleResponse();
}
return Task.FromResult(0);
}
},
Description = new AuthenticationDescription
{
AuthenticationType = "OpenIdConnect",
Caption = "SomeNameHere"
}
});
trzecie, że konfiguracja aplikacji w portalu Azure (klasyczny):
czwarte, Dodałem osobną stronę logowania dla administratorów:
@using (Html.BeginForm("ExternalLogin", "Home"))
{
@Html.AntiForgeryToken()
<div class="ui basic segment">
<div class="ui list">
<div class="item">
<button type="submit" name="provider" value="OpenIdConnect" class="left floated huge ui button social">
<i class="windows icon"></i>
<span>My Org Name</span>
</button>
</div>
</div>
</div>
}
piąte, akcja ExternalLogin
nie trzeba zmieniać - po prostu niech OWIN middleware przekierować nas na stronę logowania zewnętrznego. Przepływ następnie przekieruje użytkownika z powrotem do akcji ExternalLoginCallback
.
Wreszcie, w akcji ExternalLoginCallback
, sprawdzić przychodzące żądania, aby określić, że logowanie było poprzez Azure AD, a zamiast dzwonić do tożsamości ASP.NET, I zbudować moich własnych ClaimsIdentity
, która posiada wszystkie moje (aplikację specyficzne) informacje o roszczeniach, które moja aplikacja rozpoznaje jako administrator.
Teraz użytkownicy administracyjni przechodzą na stronę https://example.com/admin
, klikając przycisk logowania, są przekierowywani do logowania Azure AD i przechodzą z powrotem do aplikacji jako administrator.
Tak, rzuciłem okiem na to. Naprawdę starałem się tego uniknąć - wrażenia użytkownika nie pasują do tego, co chcę osiągnąć. –
Możliwe, że będziesz w stanie przetasować swoje własne narzędzie wykorzystując coś w rodzaju serwera tożsamości Thinktecture (http://thinktecture.github.io/Thinktecture.IdentityServer.v2/). Minusem jest to, że nie jest już hostowaną usługą i musisz podawać i utrzymywać serwer działający jako moduł obsługi uwierzytelniania. –