如何将OpenId Connect(天蓝色广告)与内置的“零模块”模板集成在一起?

时间:2019-03-15 14:17:49

标签: authentication .net-core openid-connect aspnetboilerplate

我已经开始自定义ASP.Net Core MVC / JQuery模板,现在我想替换,并针对Azure AD进行身份验证。我看过各种文档,描述了如何在简单的ASP.Net Core MVC应用程序中使用OpenID Connect。

我苦苦挣扎的一点是如何将其用作ASP.Net Boilerplate模板的默认(唯一)身份验证方法。 在我的模板中,我选择包括登录和用户管理页面。 我应该排除它们吗?如果没有,我该如何覆盖它们?我是否应该实现自己的LoginManager(我认为答案为here)? 我应该使用并注册外部身份验证机制吗?

在旧的ASP.Net Boilerplate论坛中,我看到有人提议共享与此(here)相关的ASP.Net零代码。如果Volosoft的某人能够做到这一点,我将不胜感激。 谢谢。

编辑 我在这方面取得了一些进展。 我在Azure中添加了一个应用程序注册,其回复URL指向externallogincallback方法。 我更改了AccountController Login方法来做到这一点:

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,因此用户将再次注册。 我的问题是,什么会导致这种情况发生?

0 个答案:

没有答案