HttpClient传递ClaimsIdentity到另一个WebApi

8

我正在使用透明代理,是否可能将声明标识传递到另一个WebAPI?

我有两个WebAPI,一个是演示API,一个是应用API,它们都使用ADFS进行身份验证。

到目前为止,我的代码已经处理了演示API请求到应用API的过程。

//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);
}

1
将凭据“传递”到另一个WebAPI与“委派”身份模拟相同-因此,您可能需要将´request.ImpersonationLevel´设置为´Delegation´。 - Dietz
你找到任何解决方案了吗? - Hossein Narimani Rad
很抱歉,@HosseinNarimaniRad,不行。 - BrunoMartinsPro
很抱歉,@StianStandahl,不行。 - BrunoMartinsPro
1
我自己意识到了。最终使用了访问令牌方法。 - Stian Standahl
显示剩余2条评论
1个回答

0
在你的第一个 API 中,从用户那里获取 Auth 时,你只需要将该信息传递给进一步的请求即可。你可以传播所有标头,或者只使用带有 bearer token 的 Authorization 标头(其中包含声明详细信息)。你可以向标头添加自定义数据,并在第二个 API 侧读取它们。
你可以注册中间件来收集当前请求的标头并将它们存储到单例 DI 服务中(可以命名为 HeadersPropagator)。当你创建一个 HttpClient 时,你可以从 HeadersPropagator 中获取收集到的标头,并将它们复制到请求到你的第二个 API。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接