C# Identityserver4,参数问题。授权代码流

C# Identityserver4,参数问题。授权代码流,c#,identityserver4,C#,Identityserver4,我正在使用IDserver4(2.3)targeting.netcore 2.2实现一个开箱即用的解决方案,该解决方案通过调用以下命令与FHIR客户端通信: Url/api/openid/openapp?发布=12345t6u-34o4-2r2y-0646-gj6g123456t5&iss=myservice&launchOrganization=tilt 对于一些HL7模拟作用域等,使用带有证书和所有挡板的IIS上的快速启动,到服务访问和id令牌的令牌端点的流程都是正常的 我的问题在于,客户机

我正在使用IDserver4(2.3)targeting.netcore 2.2实现一个开箱即用的解决方案,该解决方案通过调用以下命令与FHIR客户端通信: Url/api/openid/openapp?发布=12345t6u-34o4-2r2y-0646-gj6g123456t5&iss=myservice&launchOrganization=tilt 对于一些HL7模拟作用域等,使用带有证书和所有挡板的IIS上的快速启动,到服务访问和id令牌的令牌端点的流程都是正常的


我的问题在于,客户机需要向外部客户机传递一个参数,该参数指向服务器上的某个文件或某物,在服务器上,我将一些测试患者数据存储/或用作Json

例如,是否有合适的方法通过正文或标题传递参数?您是在授权或身份验证时进行的,还是与令牌一起进行的?让我们称之为上下文。当我到达它时,服务使我关机。在他们这边说“TypeError:参数“url”必须是字符串,而不是未定义的”

提前谢谢。 通过以下方式获得:

public class CustomClaimInjection : ICustomTokenRequestValidator
{
    private readonly HttpContext _httpContext;

    public CustomClaimInjection(IHttpContextAccessor contextAccessor)
    {
        _httpContext = contextAccessor.HttpContext;
    }

    public Task ValidateAsync(CustomTokenRequestValidationContext context)
    {
        var client = context.Result.ValidatedRequest.Client;
        //client.Claims.Add(new Claim("sub", sub));  // this will be [client_sub]

        context.Result.CustomResponse = new Dictionary<string, object>
    {
        {"example-launchcontext", "https://url/" }
    };

        return Task.CompletedTask;

        //return Task.FromResult(0);
    }
}
公共类CustomClaimInjection:ICustomTokenRequestValidator
{
私有只读HttpContext\u HttpContext;
公共CustomClaimInjection(IHttpContextAccessor contextAccessor)
{
_httpContext=contextAccessor.httpContext;
}
公共任务ValidateAsync(CustomTokenRequestValidationContext上下文)
{
var client=context.Result.ValidatedRequest.client;
//client.Claims.Add(新索赔(“sub”,sub));//这将是[client_sub]
context.Result.CustomResponse=新字典
{
{“示例启动上下文”https://url/" }
};
返回Task.CompletedTask;
//返回Task.FromResult(0);
}
}

我想我现在理解了您的问题,我想您希望通过成功的身份验证返回有关患者文件存储位置的其他信息。我会将其作为声明存储在令牌中,因为它可以表示为关于主题(用户)的声明。这可以在IProfileService的已注册(通过依赖项注入)实现中完成。在“GetProfileDataAsync”的实现中,可以使用“ProfileDataRequestContext”参数的属性“IssuedClaims”设置已发布的声明。这些声明将用于填充id令牌,这是您应该考虑的操作。

“我的问题在于客户端需要将参数传递给外部客户端”Juts澄清,“客户端”是具有ID4的服务器,“外部客户端”是OIDC客户端?另外,“Url/api/openid/openapp?launch=12345t6u-34o4-2r2y-0646-gj6g123456t5&iss=myservice&launchOrganization=tilt”是“外部客户机”的重定向uri,对吗?@Randy在我的流程中,我打开了一个来自调用launchid的程序的请求:https://theirservice/api/openid/openapp?launch=123&iss=。在他们返回包含我的授权和令牌端点的预设元数据链接后,然后->登录->获取令牌(在我的情况下,将launchcontext传递给我想要信息的患者)。我看到的第一个refrect_uri出现在初始调用之后,当我到达我的服务的登录服务器时的url。在ID4服务器登录时看起来像这样:https://myids4/account/login?ReturnUrl=url/connect/authorize/callback?response\u type=code&client\u id=123&scope=openid patient/*。read launch&redirect\u uri=htp s://theiradress/api/openid/redirect&aud=谢谢,这也可以。实际上,我让它与上面的代码一起工作。我只是不知道如何将它标记为已回答。通过将其与标记一起传递:context.Result.CustomResponse=newdictionary{{“launchcontext”,“patientIdlaunchcontext”};我可以试着这样做,但这不是我现在优先考虑的事情。