2009-05-27 14 views
13

ASP.netサイトでOpenIDを使用するにはいくつかの方法がありますが、既存のメンバーシップと認証プロバイダのメカニズムを使用していないようです。ASP.netでOpenIDを「適切に実装する」 - メンバーシップまたは認証プロバイダ?

私は、OpenIDに依存しているサイトを作成するのに適切な方法は何でしょうか?フォーム認証を引き続き使用しますが、OpenIDに対するルックアップを行うSqlMembershipProviderの変種を実装していますか?

また、自分のFormsAuthenticationModuleをさらに深く書きたいと思いますか?私の知る限り、フォーム認証はどのデータソースを参照することもできるので、あまりにも裸ではないようです。

FormsAuthenticationModuleを保持し、OpenIDに対してルックアップを行うという3つ目の方法がありますか?

これはASP.net MVCアプリケーションのためのものです。違いがある場合は、組み込みのログインWebフォームコントロールを使用していません。

答えて

10

ASP.NETで定義されているメンバシップAPIは、OpenIDにはまったく適合しません。なぜなら、おそらくあなたがそれを使用するシステムが多くないからです。メンバーシッププロバイダをまだOpenIDで使用する必要はありませんでしたので、実際に問題になっていません。メンバーシッププロバイダーモデルをOpenIDに適合させようとしたプロジェクトの1つがhttp://code.google.com/p/dotnet-membership-provider/ですが、最近メンテナンスされているようには見えません。

wompによると、FormsAuthenticationModuleをやり直す必要はありません。これはOpenIDと完全にうまく動作します。

DotNetOpenAuthに付属のproject templatesをご覧になり、メンバーシッププロバイダなしでどのように動作するか確認してください。

+0

投票OpenIDで動作するより優れたメンバーシッププロバイダインターフェイスのために:http://aspnet.uservoice.com/forums/41199-general/suggestions/486926-new-membership-provider-interface-supporting-redir –

0

DotNetOpenIdに含まれているASP.NET MVCサンプルは、OpenIDで認証された後にFormsAuthenticationを使用してユーザーをログインします。私が知る限り、Membershipシステムとの統合は行いません。

4

OpenID Membership Providerプロジェクトがあなたが探しているプロジェクトかもしれません。

ログインコントロールを使用していなくても、メンバーシッププロバイダモデルを利用して認証することをお勧めします。

FormsAuthentication固有の機能を実装するほど深くする必要はありません。なぜなら、MembershipProviderを書くことはかなり簡単であり、扱うのに十分な柔軟性がないケースは見つからないからです。実際のプロバイダを取得するには、インターフェイスの1つのメソッド(ValidateUser())を実装するだけでよいことに注意してください。

+4

このプロジェクトではOpenIDライブラリの古いバージョンを使用しており、最新バージョン(DotNetOpenAuthはhttp://dotnetopenid.googlecode.com/)からアップグレードすることはお勧めしません。 –

0

誰かが良い例を見つけたらjanrainの例 - 私に教えてください。

dsnがtumblrを指しているのですが、ログインウィジェットの場合、ルートの下のフォルダへのパスがあるサブドメインに戻ってきます。

これで私はこのC#ヘルパークラスを使用しているapp_codeフォルダを持っています - 私はトークンを元に戻すことができますし、私のmembers.domain.comに連れて行っているので、ウィジェットは機能していますメンバーエリアにアクセスするのに使用したプロバイダーに関するユーザーの詳細を取得します。

http://groups.google.com/group/rpx-developers/web/c-helper-class?_done=/group/rpx-developers%3F

'/' アプリケーションでヘルパークラス

エラー

サーバーエラーです。 予期しないAPIエラー 説明現在のWeb要求の実行中に、未処理の例外が発生しました。エラーの詳細とコード内のどこで発生したのかについては、スタックトレースを参照してください。

例外の詳細:のSystem.Exception:予期しないAPIエラー

ソースエラー:

22行目: 23行目:RPXのfeedit =新RPX( "APIキー"、 "https://learnbartending.rpxnow.com/"); 行24:feedit.AuthInfo(justoken); 行25:XmlElement xmlstuff = feedit.AuthInfo(justoken); ライン26:

ソースファイル:C:\ INETPUB \バーチャルホスト\ learnbartending.com \をhttpdocs \メンバーはDefault.aspx.csライン\:ちょうど

0

それをチェックアウトするときに最初にログインし、目それ以降のログイン時に新鮮なパスワードを回すメカニズムを見つけてください。このパスワードは、明らかにメンバーシップ・プロバイダーのためのものであり、透明になります。

今、楽しい部分は、一般的なメタデータを見つけることですか? HMMの電子メールアドレスはおそらく?

私はfacebook connectとこのジレンマにも取り組んでいます。私は自分のデータベースの分類された投稿にそれらを結びつけるためにユーザーIDを持たなければならない。

楽しいもの。

ただ更新。私はこれがうまく機能している。

私は店FacebookやOpenIDのためのaccess_token

CREATE TABLE [dbo].[OAuthUsers] 
(
    [OuthUserID] [int] IDENTITY(1,1) NOT NULL, 
    [UserID] [uniqueidentifier] NOT NULL, 
    [access_token] [varchar](150) NULL, 
    [expires_in] [datetime2](7) NULL, 
    [refresh_token] [varchar](150) NULL, 
    [issued_at] [datetime2](7) NULL, 
    [user_id] [varchar](50) NOT NULL, 
    [domain] [varchar](50) NULL, 
    [scope] [varchar](150) NULL, 
    CONSTRAINT [PK_OAuthUsers] PRIMARY KEY CLUSTERED 
) 

テーブルを作成しました。 OpenIDには、あなたが求めることができる更新トークンがありますので、それを保存してください。

私はredirect_urlとしてashxハンドラを持っています。そのハンドラでは、各ケースごとにすべての処理を実行できます。ユーザーはすでにプロバイダデータベースにアカウントを持っています。ユーザーはプロバイダデータベースにアカウントを持っていないので、アカウントを作成します。それらのすべてのきちんとしたごみ:

それを楽しんでください。

2

これは古い質問ですが、私はそれを探し回っているときのアプローチを見ていないので、ここでは行きます。 (完全なOpenID統合ではなく、私の会社のGoogle Apps for Businessアカウントとの統合の外観を作り出しているため、Googleでのみテストされています。)

私はDotNetOpenAuthを使用してOpenIDを要求していますが、電子メールアドレスが必要です。その後

 request.AddExtension(new ClaimsRequest 
     { 
      BirthDate = DemandLevel.NoRequest, 
      Email = DemandLevel.Require, 
      FullName = DemandLevel.Require 
     }); 

、私は戻って、認証応答を得るとき、私は電子メールからユーザー名を検索:フォームを設定し、

  case AuthenticationStatus.Authenticated: 
       ClaimsResponse info = response.GetExtension<ClaimsResponse>(); 
       string username = Membership.GetUserNameByEmail(info.Email); 
       FormsAuthentication.SetAuthCookie(username, true); 
       return Redirect(ReturnUrl ?? "/"); 

はあなたもメンバーシップおよびロールプロバイダが設定していると仮定すると、適切なユーザー名の認証Cookieを使用すると、メンバーシップとロールの他のすべての機能にアクセスできます。

+0

会員データベース? –

+0

新しいアカウントを作成すると保存されますか? – Dave

+1

はい、パスワードはどのように扱いますか? –

関連する問題