使用身份服务器4登录子域多租户

我正在尝试使用身份服务器4实现多租户应用程序,假设我有


web1.local.com

web2.local.com

当我登录到 web1.local.com 其他域时,web2.local.com 也会自动登录。


有没有办法将这些登录名分开?


我正在考虑有自定义实现IUserSession


public virtual async Task CreateSessionIdAsync(ClaimsPrincipal principal, AuthenticationProperties properties)

{

    if (principal == null) throw new ArgumentNullException(nameof(principal));

    if (properties == null) throw new ArgumentNullException(nameof(properties));


    var currentSubjectId = (await GetUserAsync())?.GetSubjectId();

    var newSubjectId = principal.GetSubjectId();


    if (!properties.Items.ContainsKey(SessionIdKey) || currentSubjectId != newSubjectId)

    {

        properties.Items[SessionIdKey] = CryptoRandom.CreateUniqueId(16);

    }


    IssueSessionIdCookie(properties.Items[SessionIdKey]);


    Principal = principal;

    Properties = properties;

}


private void IssueSessionIdCookie(string sid)

{

    if (Options.Endpoints.EnableCheckSessionEndpoint)

    {

        if (GetSessionIdCookieValue() != sid)

        {

            HttpContext.Response.Cookies.Append(

                Options.Authentication.CheckSessionCookieName,

                sid,

                CreateSessionIdCookieOptions());

        }

    }

}

什么是最好的方法?


开满天机
浏览 79回答 1
1回答

繁花不似锦

我相信您遇到的问题是,一旦会话cookie由IdentityServer发出,无论最初用于登录哪个应用程序,IdentityServer将始终跳过来自任何其他应用程序的后续请求的登录(因为最初管理的会话cookie)。若要始终强制在不同应用程序之间进行身份验证,可以在授权请求上使用“prompt”查询字符串,并将其设置为等于“login”。更多信息可以在这里找到:http://docs.identityserver.io/en/latest/endpoints/authorize.html?highlight=prompt
打开App,查看更多内容
随时随地看视频慕课网APP