2017-03-21 5 views
0

私はOpenIdConnectサーバーを持っています接続しています初めてサーバーにログインするときにトークンデータを転送したいと思います。現在、私はアクセストークンを転送するためにこれをやっています認証トークンプロファイルヘッダーを設定する

​​

私もプロファイルデータを送信したいが、適切なヘッダーがわからない。 は、どのように私はこのような何かを行うことができます:私は、アクセストークンにこれらの主張を追加できるように

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

誰もが適切なヘッダを知っています。ここで

+0

サーバーはリクエストヘッダーでユーザープロファイルを受け入れますか?プロファイルデータは一般的に要求本体に渡されます。 – TejSoft

+0

@TejSoftはあなたに例を挙げることができます –

答えて

1

は、我々のプロジェクトの一つにやったことの一例です:

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

そしてGETとPOST APIエンドポイントを呼び出すための一般的な方法:

は、以下のような共通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データをどのように表示するかを示しています。今、質問はどのようにサーバーがユーザープロファイルを期待しているのですか? 1つのオプションは、POST APIを呼び出して、本文にユーザープロファイルを提供することです。 – TejSoft

+0

私はこれを他のクレームと一緒に読んで、名前などにアクセスできるようにしようとしています –

関連する問題