안녕하세요. myID.net 입니다.

오픈마루에서 서비스중인 레몬펜이 joins.com의 18대총선 사이트에 들어갔습니다.
오픈마루 서비스 중에서는 처음으로 제한적 본인확인제를 적용해야 하는 서비스이기도 한데요.
본인확인을 해야하는 컨슈머(RP)에서 개별적으로 본인확인을 할 수도 있겠지만, 개별 컨슈머(RP)마다 주민번호를 입력하는 것이 오픈아이디의 본래 취지에도 맞지 않을 뿐더러, 여러 사이트에 주민번호가 저장되는 것 또한 개인 정보 보호에 옳지 않은 것 같아서 본인 확인 여부를 IDP에서 제공하는 형태를 고민하게 되었습니다.

본인확인 프로토콜은 IDP에서 본인확인을 반드시 수행하는 것을 보장하는 것이 아니라, IDP가 본인확인을 수행한 뒤, 본인확인 여부를 컨슈머(RP)에게 전달하는 방법입니다. 따라서 컨슈머(RP)는 신뢰할 수 있는 IDP 목록을 별도로 관리할 필요가 있습니다.

아래는 프로토콜 스펙입니다. sreg에 필드하나를 추가하는 방법도 고민을 해보았습니다만, 아무래도 전달되는 필드가 추후에 추가될 가능성이 큰데다, sreg나 2.0의 ax(attribute exchange)처럼 어떤 속성값을 요청한다는 의미보다는 본인확인을 수행해라는 명령의 성격이 강해서 단순하지만 별도의 name space로 분리하게 되었습니다.

프로토콜 스펙
  1. Request parameters
    아래 request parameter는 오픈아이디 인증 요청(checkid_immediate 또는 checkid_setup)시 전달되어야 한다.

    1. openid.ns.kren

      value : http://spec.openid.or.kr/extensions/kren/1.0 (openid spec 2.0에서만 사용)

    2. openid.kren.request

      value : verify

      실명확인을 강제하는 request
      반드시 실명확인을 수행해야함 (정상적인 상황에서는 Response가 항상 T[true]가 됨)

      value : retrieve

      현재 해당 openid가 실명확인지 되었는지 여부만 리턴
      실명확인을 하지 않은 ID의 경우 실명확인 없이 Response를 F[false]로 리턴

  2. Response parameters
    아래 response parameter는 OP(Identity provider)가  "openid.mode"의 값을 "id_res"로 응답할 때, 포함되어야 한다.
    응답 메시지에서 "openid.signed" field에 실명확인 필드가 'openid.' 접두어 없이 (ex, kren.verified) 반드시 포함되어야 한다. "openid.sig" 필드는 반드시 kren.field 값을 포함한 서명값을 가져야한다.
    1. openid.ns.kren

      value : http://spec.openid.or.kr/extensions/kren/1.0 (openid spec 2.0에서만 사용)

    2. openid.kren.verified

      value : T

      실명확인이 된 경우

      value : F

      실명확인이 되지 않은 경우

샘플코드

현재는 ruby 만 샘플이 있습니다.
  1. request
    def do_begin
      ...
      request = $consumer.begin(openid_url)
      case request.status
      when OpenID::FAILURE
      ...
      when OpenID::SUCCESS
       request.add_extension_arg('sreg','policy_url', policy_url)
       request.add_extension_arg('kren','request','verify')
      else
      ...
      end
    end

  2. response
    def do_complete
      ...
      response = $consumer.complete(@req.query)
      ...
      verified = false
      if response.status == OpenID::SUCCESS
       ...
       kren = response.extension_response('kren')
       verified = (kren['verified'] == 'T') if kren
      end
      ...
    end
위 빨간색 코드와 같이 ruby에서는 sreg와 동일한 방법으로 kren에 대한 값으로 request를 보내고 response에서 'verified' 값을 확인하면 됩니다.

트랙백 주소 :: http://blog.myid.net/trackback/58

  1. Subject: myID 의 제한적 본인확인, 제한적 적용 소개

    Tracked from OpenID 커뮤니티 2008/04/01 19:46  삭제

    OpenID 가 국내에서 실용화, 대중화 되기 위해서는 국내 실정에 맞는 몇가지 과제를 해결해야 합니다. 그중에서도, 실명제가 가장 큰 과제중 하나입니다. 당장 일 방문객 30 만 이상의 국내 대부분의 주요 사이트에서는 '제한적 본인확인제' 를 수행해야 합니다. 결국, 대중적인 사이트에 오픈아이디가 '쉽게' 적용되려면 어떤 식으로든 해결책이 마련되야 하는 것이지요. (물론, 최근에 인터넷 실명제 반대운동도 있습니다만, 정책이 변경되기 까지는, 서비스..

  2. Subject: OpenID 제한적 본인확인 확장에 대한 의견

    Tracked from Digital Identity Stories 2008/04/09 16:17  삭제

    최근 myID.net 에서 OpenID 기반에서 제한적 본인확인을 할 수 있는 기능을 개발했고, 같은 회사 (오픈마루)의 서비스인 레몬펜 - 중앙일보 총선 사이트 에 적용했습니다. http://openid.or.kr/73이전부터 많은 ...

댓글을 달아 주세요

  1. 2008/04/08 11:20  댓글주소  수정/삭제  댓글쓰기

    관리자만 볼 수 있는 댓글입니다.

  2. paRang 2008/05/01 18:16  댓글주소  수정/삭제  댓글쓰기

    흐미.. 오픈아이디도 드디어 본인확인제의 도입인가요.. ;;

  3. 박지용 2008/06/09 16:16  댓글주소  수정/삭제  댓글쓰기

    안녕하세요 openid.org의 오픈아이디를 쓰고 있습니다. openid.org에서 생성된 계정으로 글을 쓸려고 하니 에러가 발생하네요.

    Runtime Error
    Description: An application error occurred on the server. The current custom error settings for this application prevent the details of the application error from being viewed remotely (for security reasons). It could, however, be viewed by browsers running on the local server machine.

    Details: To enable the details of this specific error message to be viewable on remote machines, please create a <customErrors> tag within a "web.config" configuration file located in the root directory of the current web application. This <customErrors> tag should then have its "mode" attribute set to "Off".

    <!-- Web.Config Configuration File -->

    <configuration>
    <system.web>
    <customErrors mode="Off"/>
    </system.web>
    </configuration>


    Notes: The current error page you are seeing can be replaced by a custom error page by modifying the "defaultRedirect" attribute of the application's <customErrors> configuration tag to point to a custom error page URL.

    <!-- Web.Config Configuration File -->

    <configuration>
    <system.web>
    <customErrors mode="RemoteOnly" defaultRedirect="mycustompage.htm"/>
    </system.web>
    </configuration>

    그리고, myid.net의 소유주가 엔씨소프트인가요?
    후이즈에서 검색해 보니 그렇게 나와서 한 번 여쭤봅니다.

  4. myid 2008/06/10 11:26  댓글주소  수정/삭제  댓글쓰기

    박지용님 안녕하세요. myID입니다.

    알려주신 내용은 저희 블로그에서 보낸는 인증요청을 openid.org에서 제대로 처리하지 못해서 발생하는 에러메시지 입니다.
    원인은 openid.org에 있을 수 있지만 저희 블로그에서 사용하는 OpenID라이브러리의 결함일 수도 있겠군요.
    다시한번 확인해 보고 조치하도록 하겠습니다.

    알려주셔서 감사합니다. ^^;

안녕하세요, myID.net 입니다.

공지드렸던 변경 약관이 오늘 (2008년 3월 21일)부터 적용됩니다.

앞으로도 계속 이용자들의 목소리에 귀기울이는 myID.net 이 되도록 노력하겠습니다.

감사합니다. :-)

트랙백 주소 :: http://blog.myid.net/trackback/57

댓글을 달아 주세요