2012-12-15 3 views
9

API도 필요하므로 로그인을위한 OAuth 지원을 구축하는 웹 사이트 나는 사용자와 인증 파트에 어떻게 접근해야하는지 의심 스럽다.Asp.Net, RavenDB 및 OAuth 지원을 통한 인증

그래서 RavenDB와 함께 ASP.NET MC4 애플리케이션이 있습니다.

최상의 접근 방법은 무엇입니까?

  • RavenDB의 멤버 자격 공급자 중 하나를 사용하고 API 부분에서 Oauth를 별도로 처리하려면? Ex. 그리핀의 해결책 here.

  • 또는 사용자 지정 솔루션을 만들면 회원 자격을 다시 구현하고 OAuth를 지원할 수 있습니다.

어디서부터 시작해야할지 모르겠다.

답변

10

enter image description here

** Clicky-click for da GitHub project **

저장하는 사용자 이름과 암호를 잊어 : OAuth를위한

으로 당신은 같은 해결책을 가지고 있습니다. 그게 미친 얘기 야! 사람들이 Facebook, Google 또는 Twitter 자격 증명으로 로그인하게하십시오. 그것은 일반적인 웹 사이트의 80 %입니다.

자격 증명을 인증하고 저장하는 작업은 IMO의 두 가지 작업입니다. 예를 들어, 나는 당신이 인증 한 곳을 신경 쓰지 않고 .. 일단 당신이 그 데이터를 어떻게 저장하든 상관하지 않는다. :)

개인적으로, 나는 RavenDb에 그것을 저장할 것이다. 그러나 그것은 나의 것이다. 개인적인 선택.

이와 같이 ->이 두 작업을 분리하여 유지하는 것은 (IMO) 중요합니다.

enter image description here

그래서 lets look at some codez ....

public ActionResult AuthenticateCallback(string providerKey) 
{ 
    // SNIP SNIP SNIP SNIP 

    var model = new AuthenticateCallbackViewModel(); 
    try 
    { 
     // SNIP SNIP SNIP SNIP 

     // Complete the authentication process by retrieving the UserInformation from the provider. 
     model.AuthenticatedClient = _authenticationService.CheckCallback(providerKey, Request.Params, state.ToString()); 


     // Create a new user account or update an existing account. 
     // Whatever you end up doing, this is the part u want to 
     // pass this data to your repository (eg. RavenDb, Sql Server, etc) 
     // I'll use RavenDb in this example... 
     // And yes .. this is a contrite example. U might want to check for 
     // existing email or id or whatever u need to do, etc. 
     var myUser = Mapper.Map(model.AuthenticatedClient); 
     session.Store(myUser); 
     session.SaveChanges(); 

     // SNIP SNIP SNIP SNIP 
    } 
    catch (Exception exception) 
    { 
     model.Exception = exception; 
    } 

    return View(model); 
} 

그래서 내가 무슨 짓을했는지 볼 수 있습니다.나는이 SO 응답에 노이즈 만있는 자세한 정보 (값 체크 등)를 잘라 냈다.

먼저 Authenticate 콜백을 처리합니다. 예 : 나는 방금 페이스 북에 갔다. 그리고 그것은 '긍정이라고 말했다! 당신은 ... .. 그리고 그것은 내 웹 사이트로 돌아오고 있습니다, 나는 그것을주기 위해 몇 가지 데이터를 가지고 왔습니다.

다음 ... 우리는 Facebook에서 일부 데이터를 제공받습니다. 그러나이 정보는 RavenDb에 넣으려는 형식이 아닐 수 있습니다. 그래서 이전 형식에서 새로운 반짝이 User 클래스로 변환합니다.이 클래스는 당신이 당신의 Db에 머무를 것입니다.

셋째 - 나는 이것을 Db에 저장합니다. 여기서 사용자 지정 DB 논리를 수행 할 곳은

입니다.

M O D U L R I Z E T T 자 H H S I T

The.End.

이제 실례합니다 .. Apocalypse 전에 몇 시간 남았습니다. 나는 나 자신을 준비해야한다.

+0

나는 이것을 정확히했다. 내 필요는 인증하지 말고 사용자를 식별하는 것입니다. 그래서 이것은 작동합니다. 이제는 DB에 사용자를 저장 했으므로 ASP.NET 멤버십 시스템과 함께 사용해야합니다. 그래서 [승인] 및 [AllowAnonymous]로 동작을 플래그로 표시하고 ASP.NET에서 URL 등의 기본 제공 기능을 반환 할 수 있습니다. 어떻게해야합니까? 이것으로 : http://www.codethinked.com/setting-up-authentication-in-aspnet-mvc – esbenr

+2

@esbenr'[Authorize]'등의 속성을 사용하려면 ** 사용하지 마십시오. (그리고 저는 반복 ** **) ASP.NET 멤버십 시스템을 사용해야합니다. ** 모든 상황에서 모든 것을 사용하지 마시기 바랍니다 ** (Google은 1000000 가지 이유로 이유). '[Authorize]'등을 이용하려면 .. 그냥'IPrincipal'과'IIdentity' (예, 2x I 's)에 사용 정보를 저장해야합니다. 그냥 새로운'GenericPrincipal'을 만들고 그 안에'GenericIdentity'를 새로 추가하십시오. 구글은 더 많은 코드를 위해 :) –

+0

고마워요. 나는 Auth 티켓 + 쿠키를 사용하여 정적 USER 사용자를 작동 시켰습니다 - 그것은 매력처럼 작동합니다 :-)이 방법은 인터넷에있는 장소에 많은 언급이 있습니다. BTW : 나는 사용자 정의 IPrinciple 구현 및 사용자 정의 IIdentity impl을 작성했습니다. 따라서 나는 내 사용자 컨텍스트에서 더 많은 속성을 원했습니다. 답장을 보내 주셔서 감사합니다./esbenr – esbenr

0

음. 멤버십 제공 업체는 비대 해져 있습니다. 기능을 사용하지 않고 OAuth 만 사용할 계획이라면 사용하지 않을 것입니다. MVC4에 제공된 SimpleMembership과 선서 제공자는 불행히도 더 큰 혼란입니다.

그래서 옵션은 다음과 같습니다

  1. SimpleMembership
  2. 를 사용하여 OAuth를 지원
  3. 를 사용하여 사용자 지정 멤버 자격 공급자
  4. 를 사용하여 사용자 정의 OAuth를 제공

당신이 만약에 내장 # 3에 충실하려는 계획 (Griffin.MvcContrib에서)을 사용하는 것이 좋습니다. 멤버십 제공 업체를 설립하는 것은 쉽지 않습니다. , IMO https://github.com/rafek/SimpleSocialAuth