将一个承载令牌发送到端点,然后验证该令牌。
将一个承载令牌发送到端点,然后验证该令牌。
如果我有一个将一些数据发送到终端点的方法,我理解我应该使用一个承载令牌来验证这个调用,将其发送到请求的头部。
假设我的发送/接收数据到/从终端点的方法看起来像这样:
public async TaskPostGetAsync() { var uri = new Uri("https://localhost:44322/endpoint"); using (var client = new HttpClient()) { var pairs = new List > { new KeyValuePair ("Key", "Value") }; var content = new FormUrlEncodedContent(pairs); var response = await client.PostAsync(uri, content); if (response.StatusCode != HttpStatusCode.OK) { return "Error posting KeyValue"; } string responseString = response.Content.ReadAsStringAsync().Result; JArray json = JArray.Parse(responseString); try { var returnedJson = json[returnedData]; return returnedJson.ToString(); } catch (Exception e) { return "Index is out of bounds"; } } }
当调用该终端点时运行的方法是这样的:
public async Taskendpoint() { List items = new List (); NameValueCollection nvc = Request.Form; string keyString = nvc["Key"]; try { items = await GetService.GetList(keyString); } catch (ServiceException se) { } return Json(items, JsonRequestBehavior.AllowGet); }
我该如何:
- 向终端点发送一个承载令牌(自定义存储在Azure密钥保管库中)。
- 从终端点验证这个令牌。
我找不到任何适合初学者的文档来做这个。
在使用.NET Core时,我们可以使用以下两个库来解决Sending a bearer token to endpoint, then validate this token的问题。
问题的原因:
- 在服务器端,我们需要配置身份验证服务来生成令牌。
- 在客户端,我们需要处理诸如获取令牌、请求中的注入、自动续订等客户端端的问题。
解决方法:
1. 服务器端:使用IdentityServer4库来配置身份验证服务,该服务将在身份验证后生成令牌。在该文档中,你将找到非常详细的描述,以及如何配置身份验证服务的说明。
2. 客户端:使用IdentityModel库来处理所有客户端端的问题,例如获取令牌、请求中的注入、自动续订等。通过几行配置,你可以将所有的令牌管理都抽象为IdentityModel框架。
下面是一个示例代码:
// 客户端端代码示例 using IdentityModel.Client; public async TaskFetchToken(string authority, string clientId, string clientSecret) { var tokenClient = new TokenClient(authority + "/connect/token", clientId, clientSecret); var tokenResponse = await tokenClient.RequestClientCredentialsAsync("api1"); if (tokenResponse.IsError) { throw new Exception(tokenResponse.Error); } return tokenResponse.AccessToken; } // 在请求中添加令牌示例 using System.Net.Http; using IdentityModel.Client; public async Task GetProtectedData(string url, string token) { var client = new HttpClient(); client.SetBearerToken(token); var response = await client.GetAsync(url); if (!response.IsSuccessStatusCode) { throw new Exception(response.StatusCode.ToString()); } return await response.Content.ReadAsStringAsync(); }
通过以上步骤,我们可以实现在.NET Core中发送令牌到端点,并验证该令牌的目的。
问题:发送一个承载令牌到终端点,然后验证这个令牌的原因以及解决方法。
原因:为了在请求中发送承载令牌,需要在HTTP头部中添加一个字段,格式为Authorization: Bearer YOURTOKEN
。这样做是为了在服务端验证请求的合法性和权限。
解决方法:可以使用C#来发送承载令牌。通过使用HttpClient类来发送请求,并在请求的默认头部中添加Authorization字段,值为Bearer加上你的令牌字符串。
对于服务端终端点,需要对令牌进行验证。通常,服务端会通过验证令牌的签名来进行验证。这个过程需要使用一个秘钥来验证签名,而Azure KeyVault是一个可以存储这个秘钥的地方。
通常情况下,你可以在服务器框架中配置一次令牌验证,而不是每个终端点都要进行验证。然后,你只需要指定哪些终端点需要进行令牌验证。
如果你需要更多的信息,可以参考一些相关的指南,这里有一些例子:https://blogs.msdn.microsoft.com/webdev/2016/10/27/bearer-token-authentication-in-asp-net-core/。
如果这些信息还不够,请提供更具体的使用场景和你已经了解的信息。