如何在aspnetboilerplate中全局设置TenantId

问题描述 投票:0回答:1

我们正在aspnetboilerplate中实现基于IdentityServer的外部身份验证。到目前为止,一切顺利,外部身份验证成功,但未返回回调应用程序。它停留在IdentityServer登录页面中,但用户已登录,如下所示。

enter image description here

问题似乎在于设置TenantId。

ExternalController控制器的Callback操作中,而不是AutoProvisionUser用户中,我们正在将该用户插入数据库中。但是我们不确定如何设置TenantId

[HttpGet]
public async Task<IActionResult> Callback()
{
    // read external identity from the temporary cookie
    var result = await HttpContext.AuthenticateAsync(IdentityServer4.IdentityServerConstants.ExternalCookieAuthenticationScheme);
    if (result?.Succeeded != true)
    {
        throw new Exception("External authentication error");
    }

    //AbpClaimTypes.TenantId = "1";


    CurrentUnitOfWork.SetTenantId(1);

    // lookup our user and external provider info
    var (user, provider, providerUserId, providerUserName, providerEmailId, claims) = await FindUserFromExternalProvider(result);
    .
    .
    .
}

[我们尝试使用CurrentUnitOfWork.SetTenantId(1),但看起来TenantId仅在此范围内保留,并且我在日志中看到以下错误

ng.AuthorizeInteractionResponseGenerator-显示登录名:用户不是有效

[在进一步调试并查看aspnetboilerplate的代码后,我们发现类tenantId的方法IsActiveAsync中的AbpProfileService.cs(行号41、42)为空,因此将引发上述错误。

当我对第42行的tenantId进行硬编码时,重定向按预期方式工作。

所以,在aspboilerplate中使用外部认证时,如何设置tenantId

c# authentication identityserver4 aspnetboilerplate
1个回答
0
投票

阅读本文可能会有用。 https://aspnetboilerplate.com/Pages/Documents/Zero/Identity-Server

Abp允许配置和使用IdentityServer4。这可能会帮助您实现目标。它还支持使用JWT令牌的外部身份验证,通过它可以保存有用的信息,例如租户ID等。

© www.soinside.com 2019 - 2024. All rights reserved.