如何从 Identity Server 应用程序执行外部身份验证请求?
How to perform external auth request from Identity Server app?
我正在使用 Identity Server 4,我需要与外部授权进行交互 API。
授权过程必须是这样的:
- 客户端将根据用户数据生成的令牌发送到 IdentityServer
- IdentityServer 使用特定 header 和 body 创建 POST 请求。
- IdentityServer 将此请求发送到 ExternalAuthApi 并获得包含令牌的响应
- IdentityServer 将该令牌返回给客户端(并缓存它)
我查看了有关外部身份提供者的文档,但它需要以某种方式在客户端和 ExternalAuthApi 之间进行交互,我需要避免这种交互。
如何实现IdentityServer与ExternalAuthApi的直接交互?可能吗?
我使用 ITokenCreationService
实现了这一点。
我已经创建了自己的实现并添加到服务中:services.AddTransient<ITokenCreationService, ProviderBasedTokenCreationService >();
现在在 CreateTokenAsync
中调用第 3 方服务,如
public override async Task<string> CreateTokenAsync(Token token)
{
var provider = token.GetProviderClaim();
switch (provider)
{
case "3rdPartySystem_A":
return this._systemAClient.RequestToken(token.TransformToSystemAFormat());
case "anotherSystem":
return this._anotherSystemClient.RequestToken(token.TransformToAnotherSystemFormat());
default:
return await base.CreateTokenAsync(token);
}
}
我正在使用 Identity Server 4,我需要与外部授权进行交互 API。 授权过程必须是这样的:
- 客户端将根据用户数据生成的令牌发送到 IdentityServer
- IdentityServer 使用特定 header 和 body 创建 POST 请求。
- IdentityServer 将此请求发送到 ExternalAuthApi 并获得包含令牌的响应
- IdentityServer 将该令牌返回给客户端(并缓存它)
我查看了有关外部身份提供者的文档,但它需要以某种方式在客户端和 ExternalAuthApi 之间进行交互,我需要避免这种交互。
如何实现IdentityServer与ExternalAuthApi的直接交互?可能吗?
我使用 ITokenCreationService
实现了这一点。
我已经创建了自己的实现并添加到服务中:services.AddTransient<ITokenCreationService, ProviderBasedTokenCreationService >();
现在在 CreateTokenAsync
中调用第 3 方服务,如
public override async Task<string> CreateTokenAsync(Token token)
{
var provider = token.GetProviderClaim();
switch (provider)
{
case "3rdPartySystem_A":
return this._systemAClient.RequestToken(token.TransformToSystemAFormat());
case "anotherSystem":
return this._anotherSystemClient.RequestToken(token.TransformToAnotherSystemFormat());
default:
return await base.CreateTokenAsync(token);
}
}