Как интегрировать OpenId Connect (azure ad) со встроенным шаблоном Module Zero? - PullRequest
0 голосов
/ 15 марта 2019

Я начал настраивать шаблон ASP.Net Core MVC / JQuery, и теперь я хотел бы заменить существующую аутентификацию аутентификацией по Azure AD. Я видел различные документы, описывающие, как использовать OpenID Connect в простом приложении ASP.Net Core MVC.

Я сталкиваюсь с тем, как использовать его в качестве метода проверки подлинности по умолчанию (только) для шаблона ASP.Net Boilerplate. В мой шаблон я решил включить страницы входа и управления пользователями. Должен ли я исключить их? Если нет, как я могу переопределить их? Должен ли я реализовать свой собственный LoginManager (который, я думаю, был предложен ответ здесь )? Должен ли я использовать и регистрировать внешний механизм аутентификации?

На старом форуме ASP.Net Boilerplate я вижу, что кто-то предлагал поделиться кодом ASP.Net Zero, связанным с этим ( здесь ). Я был бы признателен, если бы кто-то в Volosoft мог сделать это. спасибо.

EDIT Я добился определенного прогресса в этом. Я добавил регистрацию приложения в Azure с URL-адресом ответа, указывающим на метод externallogincallback. Я изменил метод входа в AccountController, чтобы сделать это:

return ExternalLogin("OpenIdConnect", "");

Я изменил метод ExternalLogin следующим образом:

       [HttpPost]
    [ValidateAntiForgeryToken]
    public ActionResult ExternalLogin(string provider, string returnUrl)
    {
        var redirectUrl = Url.Action(
            "ExternalLoginCallback",
            "Account",
            new
            {
                ReturnUrl = returnUrl
            });


        return Challenge(
            new AuthenticationProperties
                {
                    Items = { { "LoginProvider", provider } },
                    RedirectUri = redirectUrl
                },
            // OpenIdConnectDefaults.AuthenticationScheme
            provider
            );
    }

Теперь происходит проверка подлинности приложения в Azure AD и перенаправление на метод ExternalLoginCallback. При звонке

var loginResult = await _logInManager.LoginAsync(externalLoginInfo, tenancyName);

результат

        case AbpLoginResultType.UnknownExternalLogin:
            return await RegisterForExternalLogin(externalLoginInfo);

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

Однако при повторной аутентификации происходит точно такой же поток, т.е. метод LoginAsync возвращает UnknownExternalLogin, поэтому пользователь снова регистрируется. Мой вопрос: что могло бы вызвать это?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...