2017-02-24 6 views
0

私は、ユーザIDとパスワードに基づいてGETコールとしてアクティブディレクトリから詳細をフェッチするコードを書いています。私はユーザーIDとパスワードを - http://localhost:1234/api/User/IsAuthorized/UserID=1234;password=qwerty のようなURLに渡していますが、これは危険な方法です。誰が私の体にこれらの値を渡すためのソリューションを提供し、POSTコールとしてそれを使用する代わりに 私のコードはWeb APIのC#でget呼び出しのためのURLにIDとパスワードを渡すのを防ぐには?

[Route("IsAuthorized/UserID={userName};password={password}")] 

    [AllowAnonymous] 
    public IHttpActionResult GetIsAuthorized(string userName,string password) 
    { 
     HttpResponseMessage response = null; 
     string errorMessage = null; 
     bool hasError = false; 
     bool isValid; 


     UserDetails detail = null; 
     using (PrincipalContext pc = new PrincipalContext(ContextType.Domain, "ABC")) 
     { 

      isValid = pc.ValidateCredentials(userName, password); 
      string token = null; 
      if (isValid) 
      {     


       detail = IsAuthenticated("abc", userName, password, out errorMessage, out hasError); 
      } 


      if (hasError) 
      { 
       detail = new UserDetails(isValid, userName, null, null, null, errorMessage, null); 
      } 
      else 
      { 
       if (detail != null) 
       { 
        token = CreateToken(userName); 
        detail = new UserDetails(isValid, userName, detail.AssociateName, detail.Mobile, detail.Email, null, token); 
       } 
       else 
        detail = new UserDetails(isValid, userName, null, null, null, "unknown username or bad password", null); 
      } 

      return Ok(detail); 
     } 
    } 
+0

なぜPOSTリクエストでパスワードを渡すのが安全だと思いますか?まだ平易なテキストです... –

+0

@RB。 URLの場合のように公開されません – Prabhjot

+1

ええと - これは本当に小さな部分ですが、結局のところ、URLを見ることができるユーザーは最初にそれを入力したユーザーです。あなたはなぜパスワードを渡さなければならないのですか?結局のところ、Webサービスは "UserIsAuthorized"と呼ばれています。ユーザーが承認されているかどうかを調べるには、ユーザーIDを渡す必要があります。 –

答えて

0

なぜあなたも、このようにそれをやっている?like-行く呼んで取得することができますかクライアントからWeb APIを呼び出す必要があります。なぜ、HttpClientを使ってあなたの資格情報をAPIに渡さないのですか?このようなもの:

public async Task<TResult> PostAsync<TResult, TInput>(string uriString, TInput payload = null) where TInput : class 
    { 
     var uri = new Uri(uriString); 
     using (var client = GetHttpClient()) 
     { 
      var jsonContent = JsonConvert.SerializeObject(payload, Formatting.Indented, new JsonSerializerSettings { ContractResolver = new CamelCasePropertyNamesContractResolver() }); 
      HttpResponseMessage response = await client.PostAsync(uri, new StringContent(jsonContent, Encoding.UTF8, "application/json")); 
      if (response.StatusCode != HttpStatusCode.OK) 
      { 
       //Log.Error(response.ReasonPhrase); 
       return default(TResult); 
      } 
      var json = await response.Content.ReadAsStringAsync(); 
      return JsonConvert.DeserializeObject<TResult>(json); 
     } 
    } 

    private HttpClient GetHttpClient() 
    { 
     var client = new HttpClient(); 
     var username = //get username 
     var password = // get password 
     client.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Basic", Convert.ToBase64String(Encoding.UTF8.GetBytes($"{username}:{password}"))); 
     client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json")); 
     return client; 
    } 
関連する問題