c# - 将不记名 token 发送到端点,然后验证此 token

标签 c# .net token bearer-token

如果我有一个将一些数据发送到端点的方法,我知道我应该使用不记名 token 来验证此调用,在请求的 header 中发送。

假设我向端点发送数据/从端点接收数据的方法如下所示:

public async Task<string> PostGetAsync()
        {
            var uri = new Uri("https://localhost:44322/endpoint");

            using (var client = new HttpClient())
            {
                var pairs = new List<KeyValuePair<string, string>>
                {
                    new KeyValuePair<string, string>("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<JsonResult> endpoint()
        {
            List<Example> items = new List<Example>();

            NameValueCollection nvc = Request.Form;
            string keyString = nvc["Key"];

            try
            {
                items = await GetService.GetList(keyString);
            }
            catch (ServiceException se)
            {

            }

            return Json(items, JsonRequestBehavior.AllowGet);
        }

我如何:

  • 将不记名 token (自定义存储在 azure keyvault 中)发送到端点。
  • 从端点验证此 token

我找不到任何初学者友好的文档来执行此操作。

最佳答案

发送不记名 token 就像向表单请求添加 HTTP header 一样简单:Authorization: Bearer YOURTOKEN。您可以像这样在 C# 中执行此操作:

using (var client = new HttpClient())
  {
    client.DefaultRequestHeaders.Authorization =
      new AuthenticationHeaderValue("Bearer", yourTokenString);
    // .. rest of your code

对于服务器端点,您非常不清楚您希望如何验证 token 。你提到了 Azure KeyVault,但没有说你用它做什么。

通常服务器通过检查它们的签名来验证传入的 token 。此检查需要知道一个 secret 。 Azure KeyVault 是您可以存储该 secret 的地方。

通常,您为服务器框架配置一次 token 验证(而不是每个端点)。然后,您只需指明哪些端点需要 token 验证。

有许多指南贯穿整个过程。这里有一对:

https://blogs.msdn.microsoft.com/webdev/2016/10/27/bearer-token-authentication-in-asp-net-core/ https://goblincoding.com/2016/07/03/issuing-and-authenticating-jwt-tokens-in-asp-net-core-webapi-part-i/

如果这还不够,那么您应该发布有关您的用例和您所知道的更多具体信息。

关于c# - 将不记名 token 发送到端点,然后验证此 token ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42205003/

相关文章:

c# - Task.Run 中的全局错误处理

c# - MongoDB 从子文档中删除子文档文档

c# - 如何防止用户多次登录我的站点?

.net - 有没有方法可以覆盖ConfigurationManager.AppSettings?

node.js - Nodejs Restful 认证

c# - 尝试创建HttpWebRequest时,System.dll中发生了 'System.UriFormatException'类型的未处理异常

c# - 如何处理来自多个线程的单个结果?

c# - WPF:无法在属性元素怪异上设置属性

c# - "Token?"的确切定义是什么

c++ - "expected unqualified-id before ‘.’ token”错误--C++