UFO ET IT

OpenID 식별자 및 OAuth 토큰을 안전하게 저장

ufoet 2020. 12. 27. 11:48
반응형

OpenID 식별자 및 OAuth 토큰을 안전하게 저장


Youtube에서 OpenID 로그인 및 OAuth 토큰을 사용할 웹 앱을 만들고 있습니다. 현재 OpenID ID와 OAuth 토큰 / 토큰 비밀을 데이터베이스에 일반 텍스트로 저장하고 있습니다.

이 값을 일반 텍스트로 저장하는 것은 부적절합니까? OpenID 식별자에 대해 단방향 암호화를 사용할 수 있지만 이것이 필요한지 모르겠습니다. OAuth 토큰의 경우 내 앱이 일부 용도로 세션 토큰을 가져 오는 데 의존하므로 양방향 암호화를 사용해야합니다.

OpenID ID를 암호화해야합니까? 누군가 그것을 사용하여 사용자의 계정에 액세스 할 수 있습니까?


첫째, consumer_keyconsumer_secret.

사용자가 등록 된 응용 프로그램을 인증하고 "허용" access_token하면 사용자의 "비밀번호"로 간주되고 귀하의 응용 프로그램이 사용자를 대신하여 작동하도록 허용 하는 반환 합니다.

그래서, 단지 사용자를 받고 access_token데이터베이스에서 그들이 또한이없는 경우에 많은 도움이되지 않습니다 consumer_keyconsumer_secret완전한 액세스합니다.

서비스 제공 업체는 요청시 4 개의 매개 변수를 모두 비교합니다. 저장하기 전에 이러한 4 개의 매개 변수를 암호화하고 응답 전에 해독하는 것이 현명 할 것입니다.

사용자를 대신하여 사용자의 리소스 소유자를 업데이트하거나 변경해야하는 경우입니다. 사용자가 사이트에 로그인 상태를 유지하려면 세션을 사용하십시오.


OAuth 토큰과 시크릿은 모두 데이터베이스에 안전하게 보관되어야하지만 비밀번호와 동일한 방식으로 단방향 암호화를 사용하여 저장할 수는 없습니다. 그 이유는 요청에 서명하려면 토큰과 암호가 필요하기 때문입니다.

OAuth 서버를 실행하는 경우에도 마찬가지입니다. 요청을 확인하려면 원래 토큰 / 비밀이 필요합니다.

원하는 경우 데이터베이스 또는 데이터베이스 백업이 손상 될 경우 보안을 제공하기 위해 AES와 같은 양방향 암호화 알고리즘을 사용하여 암호화 할 수 있습니다.


여기에는 두 가지 사고 방식이 있습니다.

첫 번째 주장은 OAuth 토큰을 비밀번호처럼 취급해야한다는 것입니다. 누군가가 귀하의 데이터베이스에 액세스하고 모든 OpenID / OAuth 쌍을 확보하고 중간자 공격을 실행한다면 귀하의 사이트에서 모든 사용자를 가장 할 수 있습니다.

두 번째 주장은 이것이다 : 누군가가 당신의 데이터베이스에 접근 할 수 있고 중간자 공격을 실행하기 위해 당신의 네트워크에 대한 충분한 접근을 할 때 쯤이면 당신은 어찌 됐든 빠져 나가게된다.

나는 개인적으로주의를 기울여서 그냥 암호화 할 것이다. 이것은 암호에 대한 표준 관행이므로 조금만 더 안심할 수 있습니다.

한편 Google은 다음과 같은 조언을 제공합니다.

"토큰은 서버에 저장된 다른 민감한 정보처럼 안전하게 취급되어야합니다."

출처 : http://code.google.com/apis/accounts/docs/OAuth.html

그리고 웹상의 어떤 사람은 구체적인 구현 조언을 가지고 있습니다.

  • 일반 디스크 파일에있는 경우 파일 시스템 권한을 사용하여 보호하고 암호화되었는지 확인하고 암호를 잘 숨 깁니다.
  • 데이터베이스에있는 경우 필드를 암호화하고 키를 잘 저장하고 데이터베이스 자체에 대한 액세스를 신중하게 보호하십시오. *
  • LDAP에있는 경우 동일한 작업을 수행하십시오.

http://brail.org/wordpress/2009/05/01/implementing-oauth-take-care-with-those-keys/


OpenID URL은 문자 그대로 "open id"이므로 암호화해서는 안됩니다. 모든 사람이 값을 알고 있어야합니다. 게다가 URL은 데이터베이스의 색인이어야하며 데이터베이스의 색인을 암호화하는 것은 항상 문제가됩니다.

OAuth 토큰 / 비밀은 비밀이어야하며 토큰을 장기간 저장해야하는 경우 암호화가 보안을 향상시킬 수 있습니다. OAuth 소비자 애플리케이션에서 토큰 / 비밀은 세션에 잠시 동안 만 저장되며 암호화하지 않도록 선택합니다. 충분히 안전하다고 생각합니다. 누군가 우리의 세션 저장소를 들여다 볼 수 있다면 아마도 우리의 암호화 키를 가지고있을 것입니다.


예, 이들은 데이터베이스에 저장되어있을 때 대칭 적으로 암호화되어야합니다 (예 : CBC 모드의 AES-256). 이러한 토큰을 암호화하는 간단한 방법은 SecureDB 의 Encryption as a Service RESTful API를 사용하는 것입니다.

공개 : 저는 SecureDB에서 일합니다.

참조 URL : https://stackoverflow.com/questions/1878830/securly-storing-openid-identifiers-and-oauth-tokens

반응형