两个IdentityServer4之间的集成(aspnet身份)
Integration between Two IdentityServer4 (aspnet identity)
我正在尝试将 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 table 未填充来自 A
的用户数据
- B 使用用户数据填充用户声明 table。
在这个阶段,我需要一种方法或最佳实践来实现:
- 在不存在的情况下创建A到B,B到A的账户。
- 从源合并创建的帐户,或者只是 link ids
的一种方式
- 无论身份验证源如何,都能够访问身份服务器客户端。
- 关联角色或任何声明以识别登录源。
- 更新用户信息并重设密码
您要实现的目标称为联合网关。
什么是联合网关,为什么需要它?
http://docs.identityserver.io/en/latest/topics/federation_gateway.html
如何实现联邦网关?
http://docs.identityserver.io/en/latest/quickstarts/4_external_authentication.html
Federation Gateway 文档已修复问题
http://docs.identityserver.io/en/latest/quickstarts/4_external_authentication.html
使用 4_ImplicitFlowAuthenticationWithExternal 快速入门来识别并修复问题。
我正在尝试将 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 table 未填充来自 A 的用户数据
- B 使用用户数据填充用户声明 table。
在这个阶段,我需要一种方法或最佳实践来实现:
- 在不存在的情况下创建A到B,B到A的账户。
- 从源合并创建的帐户,或者只是 link ids 的一种方式
- 无论身份验证源如何,都能够访问身份服务器客户端。
- 关联角色或任何声明以识别登录源。
- 更新用户信息并重设密码
您要实现的目标称为联合网关。
什么是联合网关,为什么需要它? http://docs.identityserver.io/en/latest/topics/federation_gateway.html
如何实现联邦网关? http://docs.identityserver.io/en/latest/quickstarts/4_external_authentication.html
Federation Gateway 文档已修复问题 http://docs.identityserver.io/en/latest/quickstarts/4_external_authentication.html
使用 4_ImplicitFlowAuthenticationWithExternal 快速入门来识别并修复问题。