HttpClient将ClaimsIdentity传递给另一个WebApi

本文关键字:另一个 WebApi ClaimsIdentity HttpClient | 更新日期: 2023-09-27 18:24:01

Im使用透明代理,是否可以将声明标识传递给另一个WebAPI?

我有两个WebAPI,演示和应用程序,都使用ADFS进行身份验证。

到目前为止,我处理应用程序WebAPI 演示请求的代码

//Obtain ClaimsIdentity (Contains claims)
ClaimsPrincipal icp = Thread.CurrentPrincipal as ClaimsPrincipal;
ClaimsIdentity claimsIdentity = (ClaimsIdentity)icp.Identity;
var baseAddress = ConfigurationManager.AppSettings["ApplicationalWebApiUrl"] + "/" + url;
var http = (HttpWebRequest)WebRequest.Create(new Uri(baseAddress));
http.Accept = "application/json; charset=utf-8";
http.ContentType = "application/json; charset=utf-8";
http.Method = "GET";
//Doesn't pass the ClaimsIdentity
http.UseDefaultCredentials = true;
try
{
    //Get the requested data
    var response = http.GetResponse();
    var stream = response.GetResponseStream();
    var sr = new StreamReader(stream);
    var contentResponse = sr.ReadToEnd();
    return Request.CreateResponse(JsonConvert.DeserializeObject<Object>(contentResponse));
}
catch (Exception ex)
{
    return Request.CreateResponse(HttpStatusCode.BadRequest, ex.Message);
}

HttpClient将ClaimsIdentity传递给另一个WebApi

在从用户处获得Auth的第一个API中,您只需要将该信息传递给进一步的请求。您可以传播所有标头,也可以仅传播带有bearer tokenAuthorization标头(声明详细信息中包含该标头)。您可以将自定义数据添加到标头中,并在第二个API侧读取它们。

您可以注册中间件,该中间件从当前请求中收集头并将它们存储到singleton DI服务(可以像HeadersPropagator一样命名)。当您创建一个HttpClient时,您可以从HeadersPropagator获得收集的头,并将它们复制到您的第二个API