我正在尝试使用另一个IndentityServer4( b )实现的IndentityServer4( a )集成。这两个目前正在彼此独立工作。
我已经对此取得了一些进展,但是我觉得我没有以正确的方式进行。 IdentityServer(a)
- 添加了一个新客户端(允许GrantTypes = GrantTypes.implitic,)
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 的一种方法
- 无论身份验证源如何,都可以访问身份服务器客户端。
- 关联角色或任何识别登录源的主张。
- 更新用户信息和重置密码
您要实现的目标称为联邦网关。
什么是联邦网关,为什么需要它?http://docs.nistityserver.io/en/latest/topics/federation_gateway.html
如何实施联邦网关?http://docs.sideityserver.io/en/latest/quickstarts/4_external_authentication.html
与联邦网关文档解决的问题http://docs.sideityserver.io/en/latest/quickstarts/4_external_authentication.html
使用4_implicitflowauthenticationwithexternal QuickStart来识别和解决问题。
外部身份验证QuickStart