最佳答案
我正在开发一个 ASP.Net 核心 Web 应用程序,我需要创建一种“认证代理”到另一个(外部) Web 服务。
我所说的身份验证代理是指我将通过我的 web 应用程序的特定路径接收请求,并且必须检查这些请求的头部以获得我之前发出的身份验证令牌,然后将所有具有相同请求字符串/内容的请求重定向到一个外部 web API,我的应用程序将通过 HTTP Basic 认证进行身份验证。
下面是伪代码的整个过程
/extapi
)发出 GET 请求,并在 HTTP 头中添加认证令牌这是我目前掌握的情况。它似乎工作得很好,但我想知道这是否真的应该这样做,或者如果没有一个更优雅或更好的解决方案吗?从长远来看,这种解决方案是否会对扩展应用程序造成问题?
[HttpGet]
public async Task GetStatement()
{
//TODO check for token presence and reject if issue
var queryString = Request.QueryString;
var response = await _httpClient.GetAsync(queryString.Value);
var content = await response.Content.ReadAsStringAsync();
Response.StatusCode = (int)response.StatusCode;
Response.ContentType = response.Content.Headers.ContentType.ToString();
Response.ContentLength = response.Content.Headers.ContentLength;
await Response.WriteAsync(content);
}
[HttpPost]
public async Task PostStatement()
{
using (var streamContent = new StreamContent(Request.Body))
{
//TODO check for token presence and reject if issue
var response = await _httpClient.PostAsync(string.Empty, streamContent);
var content = await response.Content.ReadAsStringAsync();
Response.StatusCode = (int)response.StatusCode;
Response.ContentType = response.Content.Headers.ContentType?.ToString();
Response.ContentLength = response.Content.Headers.ContentLength;
await Response.WriteAsync(content);
}
}
_httpClient
是一个在其他地方实例化的 HttpClient
类,是一个单例类,具有 http://someexternalapp.com/api/
的 BaseAddress
另外,是否有比手动创建/检查令牌更简单的方法?