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