Подтвердить что ты не робот

Поддержка отдельных учетных записей пользователей и организационных счетов в MVC5/ASP.Net Identity 2

Я создал приложение ASP.Net MVC5, в котором я настроил (и отлично работал) отдельные учетные записи пользователей через Google, Facebook и т.д.

То, что я хотел бы сделать, это также поддержка аутентификации против Azure Active Directory (организационные учетные записи). Это было бы для внутреннего персонала, чтобы иметь возможность входа в приложение в качестве администраторов.

Вся существующая информация/руководства/документация, которые я нашел, обычно имеет дело с использованием того или другого. Как мне включить их вместе?

Если для каждого типа пользователя должна быть отдельная форма входа в систему, это не будет проблемой.

EDIT:

Я смотрел конфигурацию приложения в портале Azure Active Directory и замечаю, что они определяют "ОДОБРЕНИЕ АВТОРИЗАЦИИ OAUTH 2.0". Может ли MVC5 быть настроен в Startup.Auth.cs для использования?

4b9b3361

Ответ 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 (классический):

Настройка приложения Azure Active Directory

Четвертый, я добавил отдельную страницу входа для пользователей 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 и завершают работу приложения в качестве администратора.

Ответ 3

ACS действительно может использоваться, однако, поскольку вы уже внедрили подпись Google/Facebook, я рекомендую вам напрямую интегрироваться с Azure AD вместо того, чтобы проходить промежуточную STS, такую ​​как ACS/thinktecture.

Если ваш опыт входа в приложение включает в себя нажатия пользователем на стикеры "Signin with Google/Signin with Facebook", вы можете добавить аккаунт "Signin with your company". (там даже рекомендованный стиль брендинга: http://msdn.microsoft.com/en-us/library/azure/dn132598.aspx Если приложение выполняет обнаружение области и пересылает пользователя к соответствующему IdP (используя текстовое поле, в котором говорится что-то вроде "Введите адрес электронной почты для входа" ), вы можете добавить соответствие для адресов электронной почты ваших компаний и переслать их пользователям в AAD.

В обоих случаях ваше приложение выдает запрос SSO для конечной точки единого входа AAD: https://login.windows.net/ {доменное имя /id компании/{wsfed/SAML/oauth2}. Если вы используете .Net, WSFed, это должно вас увидеть: http://msdn.microsoft.com/en-us/library/azure/dn151789.aspx. Найдите код:

SignInRequestMessage sirm = FederatedAuthentication.WSFederationAuthenticationModule.CreateSignInRequest("", HttpContext.Request.RawUrl, false);
result = Redirect(sirm.RequestUrl.ToString());   

Здесь также есть образец OpenIdConnect: http://msdn.microsoft.com/en-us/library/azure/dn151789.aspx