【发布时间】:2019-08-08 19:39:10
【问题描述】:
我正在尝试将 IdentityServer4(A) 与另一个 IdentityServer4(B) 实现集成。这两个目前彼此独立工作。
我已经在这方面取得了一些进展,但我觉得我没有以正确的方式做这件事。 IdentityServer(A)
- 添加了一个新客户端(AllowedGrantTypes = GrantTypes.Implicit,)
IdentityServer(B)
- 添加了新的身份验证源AddOpenIdConnect
.AddOpenIdConnect("oidc", "Identity Server A", options =>
{
options.SignInScheme = IdentityConstants.ExternalScheme;
options.SignOutScheme = IdentityServerConstants.SignoutScheme;
options.SaveTokens = true;
options.RequireHttpsMetadata = false;
options.Authority = "http://localhost:5000";
options.ClientId = "identityServerB";
options.GetClaimsFromUserInfoEndpoint = true;
options.Scope.Add("roles");
options.Events.OnTokenValidated = async ctx =>
{
ctx.Principal.Claims.Append(new Claim("LoginSource", "IdentityServerA"));
};
});
目前的结果是,在B上使用外部登录机制后
- 正在按预期在 B 上创建帐户,
- 用户已在 A 上注销
- B aspneUser 表未填充来自 A 的用户数据
- B 使用用户数据填充用户声明表。
在这个阶段,我需要一种方法或最佳实践来实现这一点:
- 在不存在的情况下创建A到B,B到A的账户。
- 从源合并创建的帐户,或者只是一种链接ID的方式
- 无论身份验证来源如何,都能访问身份服务器客户端。
- 关联角色或任何声明以识别登录源。
- 更新用户信息并重置密码
【问题讨论】:
-
在您的情况下,两个身份提供者之间的集成可以通过使用外部 idp 来完成,就像您可以使用 google 或 facebook 作为任何常规身份服务器实施的外部 idp。
标签: asp.net-identity single-sign-on identityserver4 claims-based-identity asp.net-core-2.1