카테고리

분류 전체보기 (509)
문학 (128)
찬양 콘티(Continuity) (80)
Business as heritage (6)
IT . Web (148)
Photo (127)
etc. (20)
Total413,430
Today3
Yesterday10






블로그 이미지

https://rpxnow.com/오픈아이디를 지원하고 아이디를 제공하는 업체들을 묶어서 최종사용을 희망하는 사이트들에 간편한 형태의 통합서비스를 제공합니다.

로그인 ID 제공자 선택하기



위 그림은 가장 기본적인 6개 ID 제공자(identity provider) 중 하나를 사이트 이용자가 골라서 로그인 할 수 있도록 제시하는 팝업(레이어) 창입니다.

사실 오픈아이디를 통해 서비스를 제공하고자 하는 수요 중에는 저처럼 오픈소스를 위주로 섞어서 자본 없이 웹 서비스를 오픈하는 스타트업들도 어느 정도 있을텐데, RPX의 Basic 라이센스는 무료로 6개 ID 제공자를 연결해주기에 매우 유용합니다. 물론 무료인만큼 기술지원도 이메일로만 가능하고, 로그인 후 사용자의 정보에도 기본적인 정보에만 접근할 수 있지만 이 정도면 충분합니다.

더 많은 수준의 정보활용이나 서비스가 필요하면 비용을 지불하는 Plus나 Pro 라이센스를 택할 수도 있습니다.

라이센스 상세정보


매커니즘은 매우 심플한데 아래의 단계를 따릅니다.
  1. RPX에 오픈아이디 적용을 희망하는 사이트 이름과 도메인을 제공한 다음 API Key를 받습니다.
  2. 이어서 팝업이나 레이어로 로그인 폼을 제공할 수 있는 스크립트와 HTML을 사이트에 추가합니다.
  3. 사이트에서 RPX로 인증 후 되돌아올 페이지 주소(token_url)를 넘겨서 로그인 폼을 열면, RPX가 인증과정을 거친 후 해당 주소로 되돌려줍니다.
  4. 되돌아올 때 포함되는 값(POST 방식, token으로 넘어옵니다. Ex: ASP.NET - Request["token"])으로 로그인한 사용자의 정보를 식별(https://rpxnow.com/docs#api_auth_info)할 수 있습니다.

샘플 코드: C#, Java, PHP, or Ruby on Rails.

굳이 API 핸들링 코드를 직접 작성할 필요도 없고, 위 4종 언어 중 하나를 쓰셨다면 라이브러리에 담아 쓰시면 됩니다.

제가 적용한 ASP.NET의 경우 App_Code 폴더에 샘플 cs를 담고, token_url을 담당하는 aspx 페이지에서 아래와 같이 활용했습니다.
protected void Page_Load(object sender, EventArgs e)
    {
        if (!IsPostBack)
        {
            if (Request["token"] != null)
            {
                Rpx rpx = new Rpx("API KEY STRING", "https://rpxnow.com");

                XmlElement xElem = rpx.AuthInfo(Request["token"]);

                if ("ok".Equals(xElem.Attributes[0].Value))
                {
                    Session["RpxToken"] = Request["token"];

                    XmlElement oids = (XmlElement)xElem.FirstChild;

                    for (int i = 0; i < oids.ChildNodes.Count; i++)
                    {
                        if (oids.ChildNodes[i].Name.Equals("displayName"))
                            Session["displayName"] = oids.ChildNodes[i].InnerText;
                        else if (oids.ChildNodes[i].Name.Equals("identifier"))
                            Session["identifier"] = oids.ChildNodes[i].InnerText;
                    }
                }

                Response.Redirect("/");
            }
        }
    }

이제 identifier로 자체 제공하는 웹 서비스만의 사용자 데이터를 관리해주면 됩니다. 모든 데이터를 ID 제공자마다 동일하게 제공하지는 않지만, identifier는 확실히 제공되며 displayName 또한 대부분의 벤더가 제공합니다.

자세한 스펙은 https://rpxnow.com/docs를 참고하세요. ^-^;
Posted by One of Remnants

댓글을 달아 주세요

달력

« » 2021.6
    1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30      

최근에 받은 트랙백

글 보관함