2017-03-21 88 views
0

我有一个OpenIdConnect服务器,我正在连接到一个我想在第一次登录时转发令牌数据以存储在服务器上。目前我正在这样做,以转发访问令牌设置身份验证令牌配置文件标头

​​

我想发送配置文件数据以及但我不知道适当的标题。 我怎样才能做这样的事情:

xhr.setRequestHeader("Authorization-Profile", "Bearer " + user.profile); 

有谁知道正确的头文件,所以我可以这些说法添加到访问令牌。

+0

服务器是否接受请求头中的用户配置文件?配置文件数据通常在请求主体中传递。 – TejSoft

+0

@TejSoft能否提供示例 –

回答

1

下面是我们在我们的项目的人做了一个例子:

创建为以下公共API响应类:

public class ApiCommonResponse 
{ 
    public object Object { get; set; } 
    public int httpStatus { get; set; } 
    public string httpErrorMessage { get; set; } 
} 

和通用方法来调用GET和POST API端点。该方法将把响应映射到提供的数据模型,并将返回对象。

public static ApiCommonResponse GetApiData<T>(string token, T dataModel, string apiEndPoint = null) 
{ 
    var responseText = ""; 
    var apiCommonResponse = new ApiCommonResponse(); 
    if (apiEndPoint != null) 
    { 
     var request = (HttpWebRequest)WebRequest.Create(apiEndPoint); 
     request.Method = "GET"; 
     request.ContentType = "application/json"; 
     request.Headers.Add("Authorization", "Bearer " + token); 
     request.Headers.Add("X-Api-Version", ""); 
     try 
     { 
      var httpResponse = (HttpWebResponse)request.GetResponse(); 
      var stream = httpResponse.GetResponseStream(); 
      if (stream != null) 
      { 
       using (var streamReader = new StreamReader(stream)) 
       { 
        responseText = streamReader.ReadToEnd(); 
       } 
      } 
     } 
     catch (WebException we) 
     { 
      var stream = we.Response.GetResponseStream(); 
      if (stream != null) 
      { 
       var resp = new StreamReader(stream).ReadToEnd(); 
       dynamic obj = JsonConvert.DeserializeObject(resp); 
       throw new Exception(obj.ToString()); 
      } 
     } 
    } 

    var jsonSettings = new JsonSerializerSettings { MissingMemberHandling = MissingMemberHandling.Ignore }; 
    apiCommonResponse.Object = JsonConvert.DeserializeObject<T>(responseText, jsonSettings); 
    apiCommonResponse.httpStatus = 0; 
    return apiCommonResponse; 
} 

public static ApiCommonResponse PostApiData<T>(string username, string token, T dataModel, string apiEndPoint = null) 
{ 
    var apiCommonResponse = new ApiCommonResponse(); 

    if (apiEndPoint == null) return null; 

    var webRequest = WebRequest.Create(apiEndPoint); 
    webRequest.Method = "POST"; 
    webRequest.Timeout = 20000; 
    webRequest.ContentType = "application/json"; 
    request.Headers.Add("Authorization", "Bearer " + token); 
    webRequest.Headers.Add("X-Api-Version", ""); 

    using (var requeststreams = webRequest.GetRequestStream()) 
    { 
     using (var sw = new StreamWriter(requeststreams)) 
     { 
      sw.Write(JsonConvert.SerializeObject(dataModel)); 
     } 
    } 
    try 
    { 
     var httpStatus = (((HttpWebResponse)webRequest.GetResponse()).StatusCode); 
     var httpMessage = (((HttpWebResponse)webRequest.GetResponse()).StatusDescription); 
     using (var s = webRequest.GetResponse().GetResponseStream()) 
     { 
      if (s == null) return null; 

      using (var sr = new StreamReader(s)) 
      { 
       var responseObj = sr.ReadToEnd(); 
       if (!string.IsNullOrEmpty(responseObj)) 
       { 
        apiCommonResponse = JsonConvert.DeserializeObject<ApiCommonResponse>(responseObj); 
       } 
      } 
      apiCommonResponse.httpStatus = (int)httpStatus; 
      apiCommonResponse.httpErrorMessage = httpMessage; 
      apiCommonResponse.Object = apiCommonResponse.Object; 

     } 
    } 
    catch (WebException we) 
    { 
     var stream = we.Response.GetResponseStream(); 
     if (stream != null) 
     { 
      var resp = new StreamReader(stream).ReadToEnd(); 
      dynamic obj = JsonConvert.DeserializeObject(resp); 
      throw new Exception(obj.ToString()); 
     } 
    } 
    return apiCommonResponse; 
} 
+0

您在哪里发送用户配置文件? –

+0

我给出的示例演示了如何在头中使用GET和POST数据以及不记名令牌。现在,问题是服务器如何期待用户配置文件?一种选择是调用POST api并在主体中提供用户配置文件。 – TejSoft

+0

我想要得到这个与其他索赔一起阅读,所以我有权访问的名称等 –

相关问题