Ответ 1
Мне удалось реализовать это, выполнив следующие действия:
Сначала, добавив ссылку на пакет Microsoft.Owin.Security.OpenIdConnect
Nuget.
Второй, настроив его в моем 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"
}
});
Третий, я настраиваю приложение на Azure Portal (классический):
Четвертый, я добавил отдельную страницу входа для пользователей admin:
@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>
}
Пятый, действие ExternalLogin
не нужно изменять - мы просто позволяем промежуточному программному обеспечению OWIN перенаправлять нас на внешнюю страницу входа. После этого поток вернет пользователя к действию ExternalLoginCallback
.
Наконец, в действии ExternalLoginCallback
я проверяю входящие претензии, чтобы определить, что логин был через Azure AD, и вместо вызова в ASP.NET Identity я создаю свой собственный ClaimsIdentity
, который имеет всю мою (конкретную заявку) информацию о претензии, которую мое приложение распознает как пользователь admin.
Теперь пользователи-администраторы перейдут к https://example.com/admin
, нажмите кнопку входа в систему, перенаправляются на вход в Azure AD и завершают работу приложения в качестве администратора.