OAuth 토큰 생성에 대한 모범 사례?
OAuth를 사양 은 ConsumerKey, ConsumerSecret, AccessToken, RequestToken, TokenSecret 또는 검증의 출처에 코드 대해 아무것도 지정하지 않는다는 것을 알고 있지만 상당히 안전한 토큰 (특히 토큰 / 비밀 조합).
내가보기에 토큰을 생성하는 방법에는 몇 가지가 있습니다.
- 임의의 바이트를 사용하고 소비자 / 사용자와 관련된 DB에 저장
- 일부 사용자 / 소비자 특정 데이터를 해시하고 소비자 / 사용자와 관련된 DB에 저장
- 사용자 / 소비자 별 데이터 암호화
(1)의 장점은 데이터베이스가 가장 안전 해 보이는 정보 소스라는 것입니다. (2) 또는 (3)보다 공격을 실행하는 것이 더 어려운 것입니다.
실제 데이터 (2)를 이미 가지고있는 데이터를 다시 생성 할 수 있습니다. 어쨌든 저장 / 조회가 필요하기 때문에 (1) 이용할 수 있습니다. (1)보다 CPU 집약적입니다.
실제 데이터 (3)를 암호화하면 암호를 해독하여 정보를 알 수 있습니다. 이것은 (1) & (2)보다 약간의 저장 공간과 강력한 것으로 더 약간의 조회가 필요합니다.
적절한 할 다른 접근 방식 / 장점 / 단점이 있습니까?
편집 : 또 다른 고려 사항은 토큰에 임의의 값이 있다는 것입니다. 새로운 토큰을 발급 및 재발급 할 수있는 능력이있는 실제 데이터로만 구성되어 있습니다.
계속 질문 :
암호화 보안을 상당히 강화하기위한 최소 토큰 길이가 있습니까? 내가 이해했듯이 더 긴 토큰 비밀은 더 안전한 서명을 생성합니다. 이 이해가 맞습니까?
어떤 인코딩을 사용하면 어떤 인코딩을 사용합니까? 예를 들어, 16 진수 인코딩 (예 : GUID 공유)을 사용하는 많은 API가 있습니다. OAuth 서명 알고리즘에서 토큰은 사용됩니다. 16 진수 공유를 사용하면 사용 가능한 문자 집합이 Base64 인코딩보다 훨씬 작습니다 (예측 가능). 길이가 같은 두 개의 경우 더 큰 문자 집합을 더 많이 사용하는 경우 더 많은 것을 사용할 수 있습니다. 이것은 보안을 향상시키는 것입니다. 이 가정이 맞습니까?
OAuth 사양은 11.10 Entropy of Secrets 에서 바로이 문제를 제기합니다 .
OAuth는 모든 것이 없다고 생각하고 토큰에 대해 아무것도 말하지 않습니다. 그래서 당신이 작동하는 모든 계획이 작동합니다. 우리의 토큰은 사이트가 커짐에 따라 진화했습니다. 이전에 버전은 다음과 가변.
첫 번째 토큰은 사용자 이름, 토큰 비밀 및 종료 등이 포함 된 암호화 된 BLOB입니다. 문제는 호스트에 기록이 토큰을 취소 할 수 있습니다.
그래서 우리는 모든 것을 데이터베이스에 저장하도록 변경하고 토큰은 데이터베이스의 키로 사용되는 임의의 숫자입니다. 사용자 이름 색인이 있으므로 사용자의 모든 토큰을 쉽게 사용할 수 있고 취소 할 수 있습니다.
해킹 활동이 거의 없습니다. 난수를 사용하면 토큰이 유효한지 데이터베이스로 이동해야합니다. 그래서 우리는 암호화 된 BLOB로 돌아 다시. 이번에는 토큰에 암호화 된 키 값과 종료 만 포함됩니다. 따라서 데이터베이스로 이동하지 않고 유효하지 않고 자동화 된 토큰을 감지 할 수 있습니다.
도움이 될만한 구현 세부 정보,
- 토큰에 버전을 추가하면 기존 형식을 깨지 않고 토큰 형식을 사용합니다. 모든 토큰에는 첫 번째 바이트가 버전으로 있습니다.
- URL 안전 버전의 Base64를 사용하여 BLOB를 인코딩하면 URL 인코딩 문제를 처리 할 필요가 없습니다. 이렇게하면 삼중 인코딩 된 basestring이 표시 될 수 있으므로 OAuth 서명이 더 어려워집니다.
토큰에 IP 주소를 넣는 것은 무엇입니까?
그런 다음 각 요청에서 토큰을 해독하고 토큰 IP 주소로 요청 IP 주소를 확인할 수 있습니다.
아마도 접근은 무작위로 생성 된 공격에 대해 더 안전 할 것입니다.
베스트!
편집 됨 : 좋아, 내가 분명하지 않을 확률을 모른다고 생각합니다. 내 게시물은 답변이 아닌 질문. 나는 인터넷에서 IP 주소로 구현을 읽은 기사를 읽고 노력하지 않고 IP 주소를 토큰에 경쟁면 동적 IP 주소와 모바일 연결을 가진 클라이언트가 토큰 문제가되는 데 동의합니다.
참고 URL : https://stackoverflow.com/questions/1626575/best-practices-around-generating-oauth-tokens
'IT' 카테고리의 다른 글
http 페이지에서 https를 사용하는 Ajax (0) | 2020.08.22 |
---|---|
정규식을 사용하여 일치하는 대신에 생성 (0) | 2020.08.22 |
특정 glibc 버전에 연결해야합니까? (0) | 2020.08.22 |
matplotlib에서 종횡비를 접근 할 수 있습니까? (0) | 2020.08.22 |
HTML5 데이터 속성을 사용하는 CSS 값 (0) | 2020.08.22 |