将一个承载令牌发送到端点,然后验证该令牌。

14 浏览
0 Comments

将一个承载令牌发送到端点,然后验证该令牌。

如果我有一个将一些数据发送到终端点的方法,我理解我应该使用一个承载令牌来验证这个调用,将其发送到请求的头部。

假设我的发送/接收数据到/从终端点的方法看起来像这样:

public async Task PostGetAsync()
        {
            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 Task endpoint()
        {
            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密钥保管库中)。
  • 从终端点验证这个令牌。

我找不到任何适合初学者的文档来做这个。

0
0 Comments

在使用.NET Core时,我们可以使用以下两个库来解决Sending a bearer token to endpoint, then validate this token的问题。

问题的原因:

- 在服务器端,我们需要配置身份验证服务来生成令牌。

- 在客户端,我们需要处理诸如获取令牌、请求中的注入、自动续订等客户端端的问题。

解决方法:

1. 服务器端:使用IdentityServer4库来配置身份验证服务,该服务将在身份验证后生成令牌。在该文档中,你将找到非常详细的描述,以及如何配置身份验证服务的说明。

2. 客户端:使用IdentityModel库来处理所有客户端端的问题,例如获取令牌、请求中的注入、自动续订等。通过几行配置,你可以将所有的令牌管理都抽象为IdentityModel框架。

下面是一个示例代码:

// 客户端端代码示例
using IdentityModel.Client;
public async Task FetchToken(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中发送令牌到端点,并验证该令牌的目的。

0
0 Comments

问题:发送一个承载令牌到终端点,然后验证这个令牌的原因以及解决方法。

原因:为了在请求中发送承载令牌,需要在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/

如果这些信息还不够,请提供更具体的使用场景和你已经了解的信息。

0