openid의 동작방식 간단개요

Posted by 미스란디르 Sun, 21 Jan 2007 04:04:00 GMT

openid가 동작하는 방식은 다음과 같습니다. (스펙 1.1 기준)

  1. 먼저 openid로긴을 허용하고 싶은 사이트(블로그, 게시판, 커뮤니티 사이트 등등)를 openid consumer, 줄여서 그냥 consumer라고 하는데 이 블로그에서 하는 것과 같이 아이디 입력란에 openid 로고를 그려준다. 사용자들이 이걸 보고 openid를 사용할 수 있다고 알 수 있다. 여기서는 consumer를 tisphie.net이라고 가정하자.

  2. openid를 가진 사용자가 해당 폼에 자신의 아이디를 넣는다. (없다면 먼저 openid provider, 예를들면 myid 에 가서 가입한다. 여기서는 mithrandir.myid.net 을 쓴다고 가정하자.

  3. 이 내용은 POST로 consumer에게 전달된다. consumer는 이것이 url인지 확인해서, 맞다면 해당 url의 내용을 읽어본다. http://mithrandir.myid.net 을 보면, 다음과 같은 내용이 있다.

    여기서 XRDS는 다음 기회에 설명하고, 주목할 것은 openid.server가 되겠다. 이 항목이 바로 실제로 인증을 수행할 openid server의 url이 된다. consumer는 저것을 인식해서, server url을 포함한 특정 url로 인증하고자 하는 openid인 mithrandir.myid.net 을 포함한 몇가지 정보를 서버에 넘겨줘야한다. 그런데 어떻게?

  4. 여기서 HTTP redirection이 일어난다! 리다이렉션 같은걸로 어떻게 정보 전달이 가능하냐고? 라고 묻는 사람들이 있다. 물론 나도 그랬다. 정답은 GET이다. GET parameter로 정보를 주렁주렁 달고 리다이렉션 시키면 받은 서버에서 이 파라메터를을 받아서 해석하는 것이다. 잠깐 예를 보자.

    http://www.myid.net/server?openid.mode=checkid_setup&openid.return_to=http%3A%2F%2Ftisphie.net%2Ftypo%2Farticles%2Fcomment_openid_complete%3Fnonce%3OtThL7Cd&openid.trust_root=http%3A%2F%2Ftisphie.net%2Ftypo&openid.identity=http%3A%2F%2Fmithrandir.myid.net%2F&openid.assoc_handle=%7BHMAC-SHA1%7D%7Bdd%7D%7BsKGqUw%3D%3D%7D56b2e8 firefox 플러그인 livehttpheaders를 이용하면 간단히 스니핑해볼 수 있다. openid.mode는 checkid_setup이고, return_to 는 인증이 끝나면 돌아올 url이다. nonce와 assoc_handle은 약간의 cookie 비슷한 개념인데, 특정 값을 이용해서 openid provider와 consumer간의 통신을 보장하는 값이다(사실 nonce는 openid 1.1 spec은 아니지만 extra note에서 SHOULD로 사용할 것을 권하고 있다). 정확한 것은 다음 기회에 다시 알아보자. trust_root는 openid provider에서 보이는 consumer쪽 url이다. 생략하면 return_to와 같다. 뭐 이런 값들을 가지고 openid provider로 가면

  5. 이제 openid provider는 이 정보를 확인한 후, 실제로 인증 과정을 거친다. 즉 consumer에서 인증 요청한 사용자가 지금 브라우저를 사용해서 이쪽으로 접속한 사용자가 맞는지 확인한다. 그러고 나면 사용자에게 다음과 같이 물어본다. 'tisphie.net에서 당신의 인증 정보를 요청하는데 승인할 것인가?' 물론 사용자가 지금 그것을 원했으니 승인, 혹은 항상 승인을 눌러준다. 항상 승인은 차후 같은 trust_root에서 요청이 왔을때 그것을 물어보지 않고 승인하겠다는 뜻이다.

  6. 이제 승인버튼을 누르면 openid provider인 myid.net으로 POST가 간다. 요것을 확인후 provider는 다시 HTTP redirection을 수행한다. 아까 return_to 로 넘긴 url이 있을 것이다. 바로 이곳으로 redirect된다. 물론 정보를 주렁주렁 달고.

    http://tisphie.net/typo/articles/comment_openid_complete?nonce=OtThL7Cd&openid.sig=SUJO2x3af1TUUrBDyM4PNwyrMNM%3D&openid.mode=id_res&openid.return_to=http%3A%2F%2Ftisphie.net%2Ftypo%2Farticles%2Fcomment_openid_complete%3Fnonce%3DL9ThCdOt&openid.identity=http%3A%2F%2Fmithrandir.myid.net%2F&openid.signed=identity%2Creturn_to%2Cmode&openid.assoc_handle=%7BHMAC-SHA1%7D%7B45b2e8dd%7D%7BsKGqUw%3D%3D%7D openid.mode=id_res 와 openid.signed=identity 만 보면 된다. 나머지는 나중에 자세히 알아보자. openid.mode는 이 메시지가 인증결과라는 것을 뜻한다. signed는 인증 결과에 해당한다. identity가 맞다고 확인해준다. 이제 consumer인 tisphie.net은 mithrandir.myid.net 이 실제로 맞는 정보라는 것을 확인했다.

  7. tisphie.net 에 mithrandir.myid.net 이 쓴 커멘트가 남겨졌다. 만세~

s_reg나 xrds에 대해서는 다음에 또 다뤄보자.

2 comments | no trackbacks

Comments

  1. cncel.myid.net said 1 day later:

    그런데 s_reg도 쉽잖아. 별도 셰션으로 분리하는 이유가 있어?

  2. nainu.myid.net said 7 days later:

    왜냐면..블로그거리를 늘리기 위해서....

Trackbacks

Use the following link to trackback from your own site:
http://tisphie.net/typo/trackbacks?article_id=openid%EC%9D%98-%EB%8F%99%EC%9E%91%EB%B0%A9%EC%8B%9D-%EA%B0%84%EB%8B%A8%EA%B0%9C%EC%9A%94&day=21&month=01&year=2007

Comments are disabled