【问题标题】:Sending a bearer token to endpoint, then validate this token将承载令牌发送到端点,然后验证此令牌
【发布时间】:2017-02-13 13:16:41
【问题描述】:

如果我有一个向端点发送一些数据的方法,我知道我应该使用不记名令牌来验证这个调用,在请求的标头中发送。

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

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

我该怎么做:

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

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

【问题讨论】:

    标签: c# .net token bearer-token


    【解决方案1】:

    发送不记名令牌就像在表单请求中添加 HTTP 标头一样简单:Authorization: Bearer YOURTOKEN。你可以在 C# 中这样做:

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

    对于服务器端点,您非常不清楚您希望如何验证令牌。您提到了 Azure KeyVault,但没有说明您使用它的目的。

    服务器通常通过检查其签名来验证传入的令牌。此检查需要知道一个秘密。 Azure KeyVault 是您可以存储该机密的位置。

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

    有许多指南涵盖了整个过程。以下是一对:

    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/

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

    【讨论】:

      【解决方案2】:

      如果您使用 .Net Core,请查看以下库:

      1. 服务器端:https://identityserver4.readthedocs.io/en/latest/。在这里您将找到非常详细的说明如何配置您的身份验证服务,该服务将在身份验证后生成令牌。
      2. 客户端:https://identitymodel.readthedocs.io/en/latest/。在这里,您将找到处理所有客户端问题的框架,例如获取令牌、请求中的注入、自动续订……几乎只需要几行配置,您就可以将所有令牌管理抽象到身份模型框架中……

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2019-11-19
        • 1970-01-01
        • 1970-01-01
        • 2018-06-24
        • 1970-01-01
        • 2021-01-29
        • 1970-01-01
        • 2014-10-11
        相关资源
        最近更新 更多