ASP.Net Core Microsoft External Login - 如何获取TenantID和UserID
创始人
2024-09-15 05:30:38
0

在ASP.Net Core中获取TenantID和UserID的解决方法取决于你使用的身份验证方案。下面是使用Microsoft身份验证提供程序的解决方法,包含代码示例:

  1. 在Startup.cs文件中配置Microsoft身份验证提供程序:
services.AddAuthentication()
    .AddMicrosoftAccount(options =>
    {
        options.ClientId = "YourClientId";
        options.ClientSecret = "YourClientSecret";
    });
  1. 在控制器中注入SignInManagerUserManager
private readonly SignInManager _signInManager;
private readonly UserManager _userManager;

public YourController(SignInManager signInManager, UserManager userManager)
{
    _signInManager = signInManager;
    _userManager = userManager;
}
  1. 在登录动作中使用ExternalLoginSignInAsync来处理外部登录:
[HttpGet]
public IActionResult ExternalLogin(string provider, string returnUrl = null)
{
    var redirectUrl = Url.Action("ExternalLoginCallback", "YourController", new { ReturnUrl = returnUrl });
    var properties = _signInManager.ConfigureExternalAuthenticationProperties(provider, redirectUrl);
    return Challenge(properties, provider);
}

[HttpGet]
public async Task ExternalLoginCallback(string returnUrl = null, string remoteError = null)
{
    if (remoteError != null)
    {
        // 处理登录错误
        return RedirectToAction("Login");
    }
    var info = await _signInManager.GetExternalLoginInfoAsync();
    if (info == null)
    {
        // 处理登录错误
        return RedirectToAction("Login");
    }
    var result = await _signInManager.ExternalLoginSignInAsync(info.LoginProvider, info.ProviderKey, isPersistent: false, bypassTwoFactor: true);
    if (result.Succeeded)
    {
        // 登录成功
        var user = await _userManager.FindByLoginAsync(info.LoginProvider, info.ProviderKey);
        var tenantId = user?.TenantId;
        var userId = user?.Id;
        // 处理登录成功逻辑
        return RedirectToAction("Index");
    }
    if (result.IsLockedOut)
    {
        // 处理账号被锁定逻辑
        return RedirectToAction("Lockout");
    }
    else
    {
        // 处理创建本地用户逻辑
        var email = info.Principal.FindFirstValue(ClaimTypes.Email);
        var user = new IdentityUser { UserName = email, Email = email };
        var createResult = await _userManager.CreateAsync(user);
        if (createResult.Succeeded)
        {
            await _userManager.AddLoginAsync(user, info);
            await _signInManager.SignInAsync(user, isPersistent: false);
            // 登录成功
            var tenantId = user?.TenantId;
            var userId = user?.Id;
            // 处理登录成功逻辑
            return RedirectToAction("Index");
        }
        else
        {
            // 处理创建用户失败逻辑
            return RedirectToAction("Login");
        }
    }
}

在上述代码示例中,当用户使用外部登录完成后,可以通过_userManager.FindByLoginAsync方法获取用户的TenantIdId,然后进行相应的处理。请确保在IdentityUser模型中包含了TenantId属性。

需要注意的是,上述示例仅适用于使用Microsoft账号进行外部登录的情况,如果你使用其他身份验证提供程序,你需要相应地修改代码。

相关内容

热门资讯

最新技巧“兴动游戏辅助”从前有... 最新技巧“兴动游戏辅助”从前有开挂辅助下载(有挂教学) 了解更多开挂安装加(136704302)微信...
每日必看“wepoker到底有... 每日必看“wepoker到底有没有透视”往昔有开挂辅助挂(有挂透明挂)1、下载安装好wepoker到...
盘点一款“微乐兰州麻将小程序辅... 盘点一款“微乐兰州麻将小程序辅助”从来有开挂辅助神器(的确有挂);打开点击测试直接进入微信(1367...
盘点十款“财神破解版全自动脚本... 财神破解版全自动脚本开挂教程视频分享装挂详细步骤在当今的网络游戏中,财神破解版全自动脚本作为一种经典...
透视ai“广西友乐辅助器”从来... 透视ai“广西友乐辅助器”从来有辅助开挂平台(有挂教学);打开点击测试直接进入微信(13670430...
透视脚本“潮娱乐鱼虾蟹公式辅助... 透视脚本“潮娱乐鱼虾蟹公式辅助软件”从来有辅助工具(有挂技术);无需打开直接搜索微信(1367043...
透视肯定“山西扣点点胜率辅助器... 透视肯定“山西扣点点胜率辅助器”本然有辅助开挂脚本(有人有挂)您好:山西扣点点胜率辅助器这款游戏可以...
透视私人局“海贝之城透视辅助器... 透视私人局“海贝之城透视辅助器”先前有开挂辅助工具(有挂攻略);打开点击测试直接进入微信(13670...
查到实测辅助“wepoker挂... wepoker挂开挂教程视频分享装挂详细步骤在当今的网络游戏中,wepoker挂作为一种经典的娱乐方...
重大来袭“杭州都莱app有辅助... 重大来袭“杭州都莱app有辅助吗”从前有开挂辅助软件(竟然有挂) 了解更多开挂安装加(1367043...