2012-12-15 21 views
9

APIを必要とするウェブサイトを構築し、ログインのための(おそらく)OAuthをサポートしています。Asp.Net、RavenDB、OAuthサポートによる認証

私はRavenDBでASP.NET MC4アプリケーションを手に入れました。

最良のアプローチは何ですか?

  • RavenDBのメンバーシッププロバイダの1つを使用し、APIの部分でOauthを個別に処理するにはどうすればよいですか? Ex。グリフィンの解here

  • また、そのような種類のメンバーシップを再実装し、OAuthをサポートするカスタムソリューションを作成することもできます。

私はどこから始めたらいいのか分かりません。

答えて

10

enter image description here

** Clicky-click for da GitHub project **

保存するユーザ名とパスワードを忘れて:OAuthのた​​めの

としては、次のような解決策を持っています。それは狂った話です! Facebook、Google、Twitterの資格情報でログインできるようにする。それは一般的なウェブサイトの80%です。

資格情報の認証と格納は、IMOの2つの異なるタスクです。たとえば、私はあなたがどこで認証されても気にしません。そして一度あなたはそのデータをどのように保存するか気にしません:)

私は個人的にはRavenDbに保存しますが、それは私です個人的な選択。

このように、これらの2つのタスクを分離しておくことは(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に行ったばかりだし、「そうだよ!あなたはあなたです...そして、私のウェブサイトに戻ってきて、私はそれを私に与えるように頼んだいくつかのデータを持っています。

次へ...私たちはFacebookからいくつかのデータを与えられていますが、これはRavenDbに入れたい形式ではないかもしれません。だから私は古い形式から新しい輝きのあるUserクラスに変換します。これはあなたのDbに固執するものです。

3番目 - 私はこれをDbに保存します。 カスタムDBロジックを実行する場所です。

それだけです。

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

The.End。

私は言い訳をしてください。黙示録の前に数時間残っています。私は自分自身を準備しなければならない。

+0

私はこれを正確に行いました。私の必要性は、認証するのではなく、ユーザーを特定することです。これはうまくいく。これで私のDBにユーザーが保存されたので、ASP.NETメンバーシップシステムと一緒に使用する必要があります。だから、私は[Authorize]と[AllowAnonymous]でアクションにフラグを立て、ASP.NETのURLなどの組み込み機能を返すことができます。それ、どうやったら出来るの?これで、次のようになります。http://www.codethinked.com/setting-up-authentication-in-aspnet-mvc – esbenr

+2

@esbenr '[Authorize]'などの属性を使用するには**あなたは**いません(そして私は**、**)はASP.NET Membershipシステムを使用する必要はありません。 **どのような状況下でも、そのすべてを使用しないでください**(Googleは1000000の理由のために)。 '[Authorize]'などを利用するには、 'IPrincipal'と' IIdentity'(use、2x I's)に使用情報を格納するだけです。新しい 'GenericPrincipal'を作成し、それに新しいGenericIdentityを追加してください。より多くのコードのそれらのためのGoogle :) –

+0

ありがとう、それは私がやったことを終えたthats。私はAuthチケット+クッキーを使用して静的USERプリンシパルを動作させました - それは魅力的なように動作します:-)この方法はインターネット上の多くの場所に記載されています。 BTW:カスタムIPrinciple実装とカスタムIIdentity implを作成しました。だから、私は自分のユーザコンテキストでもっと多くのプロパティが必要でした。お返事をありがとうございます。/esbenr – esbenr

0

メンバーシッププロバイダーは肥大化しています。 OAuthだけで機能を使用する予定がない場合、私はそれらを使用しません。 MVC4で提供されているSimpleMembershipと宣誓供述プロバイダは、残念なことに大きな混乱でもあります。

だからあなたのオプションは次のとおりです。

  1. はあなたの場合は、カスタムのOAuthプロバイダー

を使用して、カスタムメンバシッププロバイダ

  • を使用
  • のOAuthサポートが組み込まれSimpleMembership
  • を使用します#3に固執する計画私は(Griffin.MvcContribの)私の使用をお勧めします。メンバーシッププロバイダを構築するのは簡単ではありません。 、IMO https://github.com/rafek/SimpleSocialAuth