c# - HttpClient 将 ClaimsIdentity 传递给另一个 WebApi

标签 c# asp.net-web-api asp.net-web-api2 httpclient adfs2.0

我使用透明代理,是否可以将声明身份传递给另一个 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 tokenAuthorization header (其中包含声明详细信息)。您可以将自定义数据添加到 header 并在第二个 API 端读取它们。

您可以注册从当前请求收集 header 并将它们存储到单例 DI 服务的中间件(可以命名为 HeadersPropagator)。当您创建 HttpClient 时,您可以从 HeadersPropagator 获取收集到的 header ,并将它们复制到您的第二个 API 中。

关于c# - HttpClient 将 ClaimsIdentity 传递给另一个 WebApi,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33873891/

相关文章:

c# - 防止 Visual Studio 在多行注释中输入时添加额外的星号

c# - 'Mountain' 没有实现接口(interface)成员 'IBiome.height'

javascript - 在我的 asp.net 项目中调用 Webapi 时出错

JQuery Ajax POST 到 Web API 返回 405 方法不允许

c# - 未找到 WebApi Controller 测试方法

c# - 值 '\r\n' 的格式无效 .","ExceptionType":"System. FormatException

c# - 不包含 "foo"的定义

asp.net-web-api - HttpConfiguration.EnableSystemDiagnosticsTracing发生了什么

oauth - 获取新访问 token 时不应替换 oauth2 中的刷新 token

c# - 我可以将 MVC 2 DataAnnotation 属性添加到现有属性吗?