2010-04-02 5 views
1

내가 ASP.NET MVC와 오픈 ID를정말 오픈 ID 및 ASP.NET MVC와 손실

을 그건 정말 아니다 (그래, 내가 확신 하나 전에! 들었하지 않은)를 구현하려고 해요 그래도 큰 문제. 내 큰 문제는 내가 로그인 한 사용자 (프로필, 역사 등)에 대한 많은 정보를 저장해야하는 응용 프로그램과 함께이 작업을 수행하는 방법에 대해 매우 혼란 스럽습니다.

OpenID가 제거되는 것처럼 보입니다. 사이트 중심의 로직을 만들고이를 잘 연다. 인증 티켓을 '유효성이 검증 된'사용자로 볼 수있게 만들면이 모든 것이 훌륭하고 훌륭합니다.하지만 모든 진지한면에서 나는 완전히 잃어버린 것입니다. OpenID를 사용하여 로그인하면 사용자가 정상적인 등록을 마치고 마치 내 응용 프로그램에 '존재'할 수있게됩니까?

저는 openId를 구현하는 NerdDinner 2.0 응용 프로그램 코드를 읽었습니다. 내 질문에 대답 해주기를 바랬지 만, 그런 단서는 찾을 수 없습니다.

답변

1

OpenID에서 데이터를 가져 와서 자동으로 새 등록을 만듭니다. 또는 빈 프로필이있는 사용자를 프로필 양식이있는 페이지로 리디렉션합니다.

+0

확인. 그럼 최선의 접근 방식은 오픈 아이디를 통해 로그인 할 때이 의사 사용자를 기록하는 것입니까? – Ciel

+0

패스워드 등은 어떻게 작동합니까? – Ciel

+0

귀하의 애플리케이션과 로그인 프로세스를 어떻게 처리하는지에 따라 다릅니다. 내 내기는 어딘가에 오픈 아이디 데이터를 저장하고 사용자가 가지고있는 모든 것을이 테이블에 연결하는 것입니다. 일반 사용자는 동일한 데이터에 연결할 다른 테이블을 갖습니다. 이렇게하면 한 프로필을 원하는만큼 많은 로그인 공급자에 연결할 수 있습니다. –

0

일반적인 방법은 기존 사용자 계정에 OpenID를 연결하는 것입니다. 내 경우에는 사용자가 여러 개의 OpenID를 가질 수있는 연관 테이블이 있습니다.

그래서 계정이 있고 https://openid.org/steven으로 로그하면 기존 계정에 매핑됩니다.

0

여기서 가장 중요한 점은 OpenID 공급자가 어떤 방식 으로든 사용자 세션을 제어하지 않는다는 것입니다. 해당 사용자와 연관된 사용자의 식별자 만 제공합니다. 선택적으로 사용자에 대한 일부 데이터를 요청할 수도 있습니다. 즉, 사용자의 OpenID 식별자 이외의 사용자 데이터를 관리 할 필요가 없습니다. 대부분의 경우 해당 식별자를 데이터베이스의 사용자와 연결하고 싶지만 꼭 필요한 것은 아닙니다.

하지만 세션을 직접 관리해야합니다. OpenID로 로그인 할 때 실제로 로그인 한 단서가 없습니다. 알고있는 것은 당신이 공급자와 통신하고 있다는 것입니다. 즉, AuthorizeAttribute이 적용된 mvc 작업은 계속 실행됩니다. 이를 위해 당신은 FormsAuthenticationTicket과 같이 발행해야 할 것 :

private void IssueFormsAuthenticationTicket(string identifier, bool rememberMe) 
{ 
    FormsAuthenticationTicket ticket = new FormsAuthenticationTicket(
     1,       //version 
     identifier,    //name 
     DateTime.Now,    //issue date 
     DateTime.Now.AddDays(14), //expiration date 
     rememberMe,    //is presistant 
     identifier     //user data 
    ); 

    //Now we encrypt the ticket so no one can read it... 
    string encTicket = FormsAuthentication.Encrypt(ticket); 

    //...make a cookie and add it. ASP.NET will now know that our user is logged in. 
    Response.Cookies.Add(new HttpCookie(FormsAuthentication.FormsCookieName, encTicket)); 
} 

이 이것의 가장 단순한 버전입니다. 그런 다음 User.Identity.Name을 사용하여 식별자 데이터에 액세스 할 수 있습니다.

데이터베이스에 저장된 일부 사용자 데이터를 원한다면 OpenID 로그인을 따르는 등록 양식을 통해이를 수행하고 식별자를 계정에 연결하십시오. 또한 여러 OpenID 식별자를 단일 계정에 연결하도록 선택할 수도 있습니다). 앞서 언급했듯이 공급자로부터 일부 데이터를 요청하여 자동 등록을 위해 사용할 수도 있습니다. 그러나 모든 제공자는 반드시 필요한 모든 것을 제공하지는 않으므로주의해야합니다.

Google은 예를 들어 필요한 것으로 표시된 데이터 만 제공합니다. 나는 당신이 그것을 얻을 수 있다면 가질 수 있기를 바라는 데이터에 대한 모든 요청을 단순히 무시하지만 실제로는 가질 필요는 없습니다. MyOpenID는 사용자가 자신의 Persona에 정보를 입력하면 필요한대로 표시되거나 요청 된 모든 데이터를 제공합니다. 그러나 사용자의 Persona에 필요하다고 표시 한 데이터가없는 경우에도 로그인이 성공합니다.

ASP.NET MVC에서 OpenID를 사용하는 것은 제 의견으로는 DotNetOpenAuth를 사용하는 것이 가장 좋습니다. 또한 MVC 샘플은 가장 간단하지만 작동하는 것처럼 보입니다.이 샘플에서는 사용자에 대한 데이터 요청 방법을 보여주지 않지만 NerdDinner에서 찾을 수 있습니다.

관련 문제