11

昨日リリースされた VS2013 の最終ビットをインストールしました。外部 Facebook ログインを有効にする例を試しています。私の最初の質問:

このコントローラー コード (私は触れず、サンプル テンプレートからそのまま残しました):

    //
    // GET: /Account/ExternalLoginCallback
    [AllowAnonymous]
    public async Task<ActionResult> ExternalLoginCallback(string returnUrl)
    {
        var loginInfo = await AuthenticationManager.GetExternalLoginInfoAsync();
        if (loginInfo == null)
        {
            return RedirectToAction("Login");
        }

await AuthenticationManager.GetExternalLoginInfoAsync() の行にブレークポイントを設定しました。コードが返され (Facebook ログインを行った後)、「loginInfo」は null です。UI では、ログイン ページが引き続き表示され、変更はありません。どうすればこれをデバッグできますか? GetExternalLoginInfoAsync() 内のコードを見つけようとしていましたが、このスレッドによると:

Microsoft.AspNet.Identity.Owin.AuthenticationManager は Asp.Net Identity RTM バージョンのどこにありますか?

AuthenticationManager はなくなりました。(これは、上記の場合には当てはまらないようです。)

私の 2 番目の質問: ASP.NET MVC5 サンプル コードを変更せずに (app.UseFacebookAuthentication のコメントを解除し、FB アプリの詳細を入力する以外に) Facebook ログインで動作するサンプルを入手できる人はいますか? (「localtest.me」などのエイリアス ホストを Facebook で構成し、IIS Express で構成する必要があります。)

助けてくれてありがとう...

-ベン

4

8 に答える 8

14

Google への認証中にこの問題が発生しました (OAuth ではなく OpenID )。したがって、混乱させるものは何もありませんでしたが、セッション変数に関するいくつかの単純なコードを変更した後、動作を停止したことは確かです。fiddler を使用して、Google が実際に有効な情報を返していることを確認しました。

私より賢い人が私の問題を理解し、ここで修正について説明しています。

ASP.NET_SessionId + OWIN Cookie がブラウザーに送信されない

Session["salt"] = "salt";Account/Login コントローラーに追加するだけで、魔法のように完全に機能し始めました。これがあなたの正確な問題かどうかはわかりませんが、これは私のものでした。

于 2014-01-29T18:43:49.807 に答える
4

わかりました、これは私の愚かでした。まず、Fiddler を使用してデバッグを開始し、Facebook がこれを送り返していることを確認しました。

WWW-Authenticate: OAuth "Facebook Platform" "invalid_request" "アプリ シークレットがクライアント トークンと同じであるため、リクエストは無効です"

このメッセージは不正確でしたが、検索したところ、アプリ シークレットをリセットすると問題が解決したとユーザーが指定した別のスレッドが見つかりました。(私は長い間このアプリを使用していなかったので、それが関係している可能性があります。) そのため、これらの手順を実行しましたが、それでも問題が発生しました。しかし、Fiddler のメッセージは次のように変更されました。

WWW-Authenticate: OAuth "Facebook Platform" "invalid_request" "アプリがデスクトップ アプリとして構成されているため、リクエストは無効です"

実際、このアプリは Facebook で誤って構成されていました。これを Web アプリに設定したところ、完全に機能するようになりました。これは Fiddler を起動するまで明確ではなかったので、他の人を助けることができれば幸いです。

于 2013-10-18T16:14:47.200 に答える
2

Facebookは常に誕生日プロパティにアクセスできると想定していたため、私にとってこれは失敗しましたが、そうではありません:

// facebook doesn't guarantee that this value exists always,
// thus we can't really add this claim to our identity object, if it's null.
var birthday = context.User.Value<string>("birthday");
if (birthday != null)
{
    context.Identity.AddClaim(new Claim("Birthdate",
         context.User.Value<string>("birthday")));
}

これはほとんどすべてに拡張されます。

1) 一部のユーザーは姓を持っていません (許可されています)

2) 一部のユーザーは fb にメールを持っていません (許可されています)

3) 一部のユーザーは誕生日を教えていません。

あなたはすべての世話をしなければなりません。

于 2015-04-27T14:38:45.433 に答える
2

私はこれを最新の VS 2013.3 テンプレートで取得し始めましたが、他のプロジェクトの 1 つから不必要に移植した FormsAuthentication で認証がうまく機能していないことに気付きました。これを修正するために私がしたことは次のとおりです。

追加した <system.web><authentication mode="None" />...

追加した <system.webServer><modules><remove name="FormsAuthentication" /></modules>...

于 2014-08-30T00:44:34.963 に答える
0

Google 内で API を有効にしていないため、同じ問題が発生しました。Fiddler が access_denied のエラー ステータスを返していました。

プロジェクトを作成し、クライアント ID とシークレット データを取得しましたが、開発者コンソールに移動して Google+ API を有効にする必要もあります。

于 2016-06-01T18:04:56.003 に答える
-1

OWIN最後に、認証に失敗するという答えが見つかりました。ASP.NET MVC 5Facebook 認証を追加しようとしているときに、アプリケーションで何が起こっているのかを本当に知りたいです。インターネット上にあるすべてのソリューションを試した後。

Facebook アプリを新しい Facebook 開発者アプリで変更するか、Facebook 開発者サイトからアプリのシークレットを変更するだけです。

于 2014-08-26T08:02:08.220 に答える
-1

Fiddler ですべてが機能しており、loginInfo にデータを入力するために必要な情報が存在することを確認できましたが、GetExternalLoginInfoAsnyc から null が返されていました。

Startup.Auth の ConfigureAuth メソッドに次の行を追加すると、loginInfo が null ではなくなりました。

app.UseExternalSignInCookie(DefaultAuthenticationTypes.ExternalCookie);
于 2015-05-07T21:02:55.147 に答える