2017-01-19 3 views
1

Ok, 설치에 약간의 배경이 있습니다.C# 응용 프로그램에서 api 자격 증명을 올바르게 보호하는 방법

저는 현재이 편안한 API의 서버 측 인 웹 Api2 프로젝트를 가지고 있습니다. 클라이언트는 현재 사용자 이름/비밀번호 조합을 사용하여 베어러 토큰을 얻습니다.이 토큰은 이후 api 호출에 사용됩니다. 프로젝트는 GitHub의 개인 프로젝트에 저장됩니다.

이 API를 활용할 C# Windows 서비스를 빌드하고 배포하려고합니다. 이 Windows 서비스와 함께 자격 증명을 배치/저장하는 것과 관련하여 가장 좋은 방법은 무엇입니까?

나는 API의 양 끝을 제어하고 나는 또한 창 서비스의 배치를 통제 할 것이다. 이것은 msi 패키지로 제공되며 일부 타사 소프트웨어 (자동화 됨)를 통해 배포됩니다. 여기

  • 자격 증명
  • 자격 증명이 클라이언트 측에서 일반 텍스트가 될 수 없습니다 소스 제어에 저장 될 수없는 요구 사항입니다.

내 질문은, 어떻게 일반 텍스트가 아닌 사용 가능한 형식으로 클라이언트에 API 자격 증명을 얻을 수 있습니까?

아니면 api에 대해 다른 인증 유형을 조사해야합니까? 나는 oauth2에 대해 간략하게 살펴 봤지만 클라이언트 측에서 누군가를 받아 들일 필요가 있다고 말할 수있는 범위까지?

누구든지이 작업을 수행하는 방법에 대한 조언이나 자료가 있다면 정말 멋지게 될 것입니다.

답변

1

나는 전문가의 것을 아니지만, 나는 좀 아래 표를 얻기 위해 나의 기회를 잡을 수 있습니다 비슷한 경우가 있었다 : 데스크탑/서비스 응용 프로그램에 0)

한 가지 방법을하는 사용자에게 물어 자격 증명을 입력하십시오. 가능하다면, 이것이 최선의 방법입니다. 사용자가 자격 증명을 한 번 입력 할 수있는 경우 ProtectedData을 사용하여 암호화 된 데이터를 저장할 수 있습니다 (이 클래스를 사용하면 코드에 암호화 키를 저장할 필요가 없습니다.이 키는 추출하기 쉽습니다 (반사기를 사용하여 ...)).

그러나이 작업을 자동으로 수행하고 자격 증명을 저장하려면 좋은 방법이 아닙니다. 자격 증명을 난독 화하고 스크립트 어린이가 볼 수 없도록 차단할 수 있지만 더 심각한 해커에게는 해킹하기가 쉽습니다.

다른 여러 옵션이 있지만 모두 해킹 가능합니다. 다른 방법은 서버의 각 컴퓨터를 MAC 주소로 등록하고 ProtectedData 클래스를 사용하여 저장된 임의의 문자열 (GUID는 작업을 수행함)이며이 특정 키 - 값 쌍만 데이터를 가져올 수 있습니다 귀하의 API에서. 당신이 여기에 문제가 : 사용자가 응용 프로그램을 제거하고 다시 설치하면 그는 서버 (그가 할 수 없기 때문에 같은 GUID를 다시 생성)에 다시 연결할 수 없습니다,

  1. 합니다. 서버에서 사용자를 삭제하고 새 사용자를 만들 수 있지만 서버의 사용자 데이터를 해킹 할 수 있으므로 서버의 GUID 만 변경할 수는 없습니다.
  2. 누구나 귀하의 API로 사용자를 열고 사용할 수 있습니다.
+0

문제를 직접 해결하지는 않았지만 정확한 경로에 표시했기 때문에 이것을 답으로 표시 할 것입니다. 해당 클라이언트 서버에는 이미 다른 타사 소프트웨어의 일부로 액세스 할 수있는 GUID가 저장되어 있습니다. 이러한 GUID는 서버 측에서도 사용할 수 있으므로 인증을 위해 GUID를 사용하는 기술적으로 "열린"API를 사용하기로 결정했습니다 – tjackadams