2017-02-13 80 views
1

如果我有一个方法发送一些数据到端点,我知道我应该使用一个不记名的令牌来认证这个调用,并在请求的头部发送。发送一个不记名令牌给端点,然后验证这个令牌

说我的方法是向/从端点接收数据/看起来像这样:

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

怎么办I:

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

我无法找到这样做的任何初学者友好的文档。

回答

1

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

using (var client = new HttpClient()) 
    { 
    httpClient.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/

如果这还不够,那么你应该张贴关于您的使用情况下,你知道什么更具体的信息。