여기서 가장 중요한 점은 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에서 찾을 수 있습니다.
확인. 그럼 최선의 접근 방식은 오픈 아이디를 통해 로그인 할 때이 의사 사용자를 기록하는 것입니까? – Ciel
패스워드 등은 어떻게 작동합니까? – Ciel
귀하의 애플리케이션과 로그인 프로세스를 어떻게 처리하는지에 따라 다릅니다. 내 내기는 어딘가에 오픈 아이디 데이터를 저장하고 사용자가 가지고있는 모든 것을이 테이블에 연결하는 것입니다. 일반 사용자는 동일한 데이터에 연결할 다른 테이블을 갖습니다. 이렇게하면 한 프로필을 원하는만큼 많은 로그인 공급자에 연결할 수 있습니다. –