我使用透明代理,是否可以将声明身份传递给另一个 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);
}
最佳答案
在您的第一个 API
从用户那里获取 Auth
时,您只需将该信息传递给进一步的请求。您可以传播所有 header ,或仅传播带有 bearer token
的 Authorization
header (其中包含声明详细信息)。您可以将自定义数据添加到 header 并在第二个 API
端读取它们。
您可以注册从当前请求收集 header 并将它们存储到单例 DI 服务的中间件(可以命名为 HeadersPropagator
)。当您创建 HttpClient
时,您可以从 HeadersPropagator
获取收集到的 header ,并将它们复制到您的第二个 API
中。
关于c# - HttpClient 将 ClaimsIdentity 传递给另一个 WebApi,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33873891/