(스펙 원본: http://openid.net/specs/openid-authentication-1_1.html)

D. Recordon

B. Fitzpatrick

May 2006

 

OpenID Authentication 1.1

개요

OpenID 인증은 사용자가 제시한 URL이 본인의 소유임을 증명함으로써 인증을 수행한다. 비밀번호나 전자우편주소와 같이, 어떤 다른 것도 전달하지 않고도 인증 절차를 진행할 수 있다.

OpenID는 완전히 분산되어 있다. 이는 누구나 Consumer 또는 Identity 제공자가 될 수 있으며, 이를 위해 중앙의 권위주체로부터 허가나 등록 또한 받을 필요가 없다는 것을 의미한다. 사용자는 자신이 사용하고 싶은 Identity 제공자를 선택할 수 있고, Identity 제공자를 변경할 경우에도 Identity를 유지할 수 있다.

  OpenID 의 프로토콜은 JavaScript 나 최신브라우저를 요구하지는 않지만, 인증방식상 소위 "AJAX"-스타일 셋업을 깔끔하기 적용할 수 있으며, 최종사용자가 현재 페이지를 떠나지 않고도 인증을 수행할 수도 있다.(물론 보안 이슈는 있다-역자).

  본 OpenID 인증 스펙상에는 사용자 프로파일 정보를 교환하기 위한 어떤 방법도 제공하지 않지만, Consumer 는 해당 OpenID 페이지에 연결된 세만틱한 형식의 문서들 (FOAF, RSS, Atom, vCARD, 등)을 통해서 사용자에 대한 정보를 얻을 수 있다. 또한 프로파일 정보 교환 수단을 제공하기 위해, 현재 OpenID 인증 기반 위에서 확장 스펙들이 작성 중이다.

 


목차

1.  요구 사항 표시법
2.  용어
3.  개관
    3.1.  HTML 문서를 Identifier 로 바꾸기
        3.1.1.  인증 위임하기
    3.2.  제시된 Identifier 제출하기
    3.3.  Consumer 사이트는 Identifier URL 내용을 구한다
    3.4.  Smart 대 Dumb 모드
    3.5.  Consumer 는 Identifier 를 검증한다
4.  Modes
    4.1.  associate
        4.1.1.  요청 인자들
        4.1.2.  응답 인자들
        4.1.3.  추가 사항
    4.2.  checkid_immediate
        4.2.1.  요청 인자들
        4.2.2.  응답 인자들
        4.2.3.  추가 사항
    4.3.  checkid_setup
        4.3.1.  요청 인자들
        4.3.2.  응답 인자들
        4.3.3.  추가 사항
    4.4.  check_authentication
        4.4.1.  요청 인자들
        4.4.2.  응답 인자들
        4.4.3.  추가 사항
5.  보안 고려 사항
Appendix A.  Default Values
Appendix A.1.  Diffie-Hellman P Value
Appendix B.  Error Responses
Appendix C.  Key-Value Format
Appendix D.  Limits
Appendix E.  Misc
6.  Normative References
§  Authors' Addresses



1. 요구 사항 표시

이 문서의 요구 사항 수준을 정확히 표현하기 위해 한글 표현 이외에도, 영문 키워드들 "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", "SHOULD", "SHOULD NOT", "RECOMMENDED", "MAY", "OPTIONAL" 을 [RFC2119] (Bradner, B., “Key words for use in RFCs to Indicate Requirement Levels,” .) 에 정의된 의미로 괄호안에 추가 표시 한다.


 TOC 

2. 용어

최종 사용자 (End User):
Consumer 에게 자신의 아이덴티티를 증명하고자 하는 실제 사람.
Identifier:
Identifier 는 단지 하나의 URL 이다. 전체 OpenID 인증 프로토콜의 흐름은 최종 사용자가 하나의 URL 을 소유했음을 증명하는 것에 관한 것이다.
제시된 Identifier (Claimed Identifier):
Consumer 에 의해 아직 검증되지 않았지만, 최종 사용자가 자신의 것이라고 말하는 Identifier.
검증된 Identifier (Verified Identifier):
최종 사용자가 Consumer 에게 자신의 것임을 증명한 Identifier.
Consumer:
제시한 Identifier가 최종 사용자의 소유인지 검증하고 싶은 웹 서비스.
Identity 제공자 (Identity Provider):

또는 "IdP" 나 "서버" 로도 불린다. 제시한 Identifier가 최종 사용자의 소유임을 암호학적으로 증명받기 위해 Consumer 가 접속하는 OpenID 인증 서버이다. 최종 사용자가 어떻게 IdP에서 인증받는지에 대한 내용은 OpenID 인증 스펙의 범위를 벗어난다 (역주: 따라서 IdP 에 따라서 다르다).

User-Agent:
최종 사용자의 웹브라우저. 특별한 플러그인이나 자바스크립트는 필요없다.

 TOC 

3. 개관


 TOC 

3.1. HTML 문서를 Identifier 로 바꾸기

Identifier를 처리하는 Identity 제공자를 Consumer에게 알리기 위해, 최종 사용자는 반드시 자신의 URL(역주: 최종 사용자의 Identifier URL) 에 위치한 HTML 문서의 HEAD 섹션에 markup 을 추가해야 한다. 이 HTML 문서의 호스트가 최종 사용자의 Identity 제공자가 되어야 할 필요는 없다(NOT REQUIRED); 그 Identifier URL 과 Identity 제공자는 완전히 분리된 서비스일 수 있다.

 

최종 사용자의 Identiifer 로 http://example.com/ 을 사용하고 Identity 제공자로 http://openid.example.com 을 사용하려면,  Identifier URL 을 가져올때 전송되는 HTML 문서의 HEAD 섹션에 다음 태그가 추가 될 것이다.

 

<link rel="openid.server" href="http://openid.example.com/">

 

 TOC 

3.1.1. 인증 위임하기

만일 최종 사용자의 호스트가  Identity 제공자를 구동할 수 없거나, 최종 사용자가 다른 호스트에서 운영되는 Identity 제공자를 사용하고자 한다면, 그들의 인증을 위임할 필요가 있다. 예를 들어, 최종 사용자는 자신의 웹사이트, http://www.example.com/, 를 자신의 Identifier로 사용하기를 원하지만 Identity 제공자를 운영할 수단이 없거나 운영하고 싶지 않을 수 있다.

만일 최종 사용자가 LiveJournal 계정을 하나 가지고 있고(사용자 "exampleuser" 이라 하자),  LiveJournal 이 OpenID Identity 제공자를 보유하여  최종 사용자가 http://exampleuser.livejournal.com/ 이라는 Identifier를 제어함을 보증한다면, 최종 사용자들은 자신들의 인증을 LiveJournal 의 Identity 제공자에게 위임할 수 있을 것이다.

즉, 최종사용자는 그들의 Identifier 로 www.example.com 을 사용하지만 Consumer 들이 실제로는 http://www.livejournal.com/openid/server.bml 에 위치한 Identity 제공자를 통해 http://exampleuser.livejournal.com/ 라는 Identifier를 검증토록 하기 위해, 최종사용자의 Identifier URL (www.example.com)을 가져올 때 전송될 HTML 문서의 HEAD 섹션에 다음 태그들을 추가해야 한다.

 

<link rel="openid.server" href="http://www.livejournal.com/openid/server.bml">

<link rel="openid.delegate" href="http://exampleuser.livejournal.com/">

 

이제, Consumer 가 해당 태그를 인식하면, http://www.livejournal.com/openid/server.bml 에게 그 최종 사용자가 exampleuser.livejournal.com 인지 여부를 질의한다. 이 과정에서 www.example.com 는 전혀 언급하지 않는다.

 

이 방식의 주요 장점은 최종 사용자가 자신 Identifier 를 여러 해 동안 유지할 수 있다는 것이다; 심지어 서비스들이 새로 나오고 또 사라지더라도 위임하는 Identity 제공자를 바꾸면서 같은 Identifier 를 계속 유지할 수 있다.


 TOC 

3.1.2. 중요 사항


 TOC 

3.2. 제시된 Identifier 제출하기

위 예제에서, 최종 사용자는 OpenID 인증을 지원하는 Consumer 사이트를 방문한다. Consumer 는 최종 사용자에게 Identifier URL 입력을 위한 폼입력란을 제시한다.

 

예를 들면:


          ----------------------------------
|[logo]example.com | [Login Button]
----------------------------------

TOC

3.2.1. 중요 사항


TOC

3.3. Consumer 사이트는 Identifier URL 내용을 가져온다

이제 Consumer 사이트는 최종 사용자가 제시한 Identifier 에 있는 문서를 읽어들인다. Consumer 는 HEAD 섹션을 파싱해서 "openid.server" 선언과 선택적으로 "openid.delegate" 선언을 가져온다.


TOC

3.3.1. 중요 사항


TOC

3.4. Smart 대 Dumb 모드

OpenID 인증은 다른 성능의 Consumer 들을 수용하기 위해서 "smart mode" 와 "dumb mode" 를 지원한다. Smart Consumer 는 시작할 때 좀 더 많은 작업을 수행함으로서 나중에 적은 동작을 하지만, 상태 정보를 로컬 캐시로 유지할 필요가 있다. Dumb Consumer 는 상태를 전혀 유지하지 않지만, 한번의 HTTP 요청을 별도로 요구한다.


TOC

3.4.1. Smart 모드의 중요 사항


3.5. Consumer 는 Identifier 를 검증한다

이 Consumer 는 이제 Identity 제공자의 checkid_immediate (또는 checkid_setup) URL 에 대한 URL 을 하나 구성하여 User-Agent 를 그곳으로 보낸다.

User-Agent 를 해당 URL로 보냄으로써, 최종 사용자의 쿠키를 비롯한 모든 로그인 증명들이 그들의 신뢰하는 Identity 제공자에게 전송된다. 이 Identity 제공자는 자신의 작업을 수행하고, 전달된 openid.return_to URL 에 자신의 응답을 추가하여 User-Agent 를 원래의 Consumer 에게 돌려 보낸다.


TOC

4. Modes


TOC

4.1. associate


TOC

4.1.1. 요청 인자들


TOC

4.1.2. 응답 인자들

Response format: Key-Value Pairs


TOC

4.1.3. 추가 사항


TOC

4.2. checkid_immediate


TOC

4.2.1. 요청 인자들


TOC

4.2.2. 응답 인자들

Response format: query string arguments


TOC

4.2.2.1. 항상 보내는 것


TOC

4.2.2.2. 입증(assertion) 실패시 보내는 것


TOC

4.2.2.3. 긍정적 확답시 보내는 것


TOC

4.2.3. 추가 사항


TOC

4.3. checkid_setup


TOC

4.3.1. 요청 인자들


TOC

4.3.2. Respone Parameters

Response format: query string arguments


TOC

4.3.2.1. 항상 보내는 것


TOC

4.3.2.2. 긍정적 확답에 보내는 것

TOC

4.3.3. 추가 사항


TOC

4.4. check_authentication


TOC

4.4.1. 요청 인자들


TOC

4.4.2. 응답 인자들

Response format: Key-Value Pairs


TOC

4.4.3. 추가 사항


TOC

5. 보안 고려 사항


TOC

Appendix A. Default Values


TOC

Appendix A.1. Diffie-Hellman P Value

1551728981814736974712322577637155\ 3991572480196691540447970779531405\ 7629378541917580651227423698188993\ 7278161526466314385615958256881888\ 8995127215884267541995034125870655\ 6549803580104870537681476726513255\ 7470407658574792912915723345106432\ 4509471500722962109419434978392598\ 4760375594985848253359305585439638443


TOC

Appendix B. Error Responses

이 섹션은 프로토콜/런타임 오류에 속하는 것으로, 인증 오류는 아니다. 인증 오류들은 프로토콜에 명시된다.


TOC

Appendix C. Key-Value Format

Lines of:


TOC

Appendix D. Limits


TOC

Appendix E. Misc


TOC

6. Normative References

[RFC2119] Bradner, B., “Key words for use in RFCs to Indicate Requirement Levels.”
[RFC2396] Berners-Lee, T., “Uniform Resource Identifiers (URI): Generic Syntax.”
[RFC2631] Rescorla, E., “Diffie-Hellman Key Agreement Method.”

TOC

Authors' Addresses

David Recordon
Email: drecordon@verisign.com
   
Brad Fitzpatrick
Email: brad@danga.com