1

アプリで認証を設定しようとしています。外部ウェブサイトへの投稿が機能しています(FacebookとGoogle)

[AcceptVerbs(HttpVerbs.Post | HttpVerbs.Get), ValidateInput(false)]
    public ActionResult OpenIdLogOn(string returnUrl)
    {
        var redirectUrl = "~/Companies/LogIn";
        var provider = Request.Form["provider"];
        if (Common.IsNull(provider))
            return View();            
        OpenAuth.RequestAuthentication(provider, redirectUrl);
        return View();
    }

これは、どのボタンがクリックされたかを把握することで機能します (facebook / Google でログイン) 次に、認証を要求します。認証が完了し、ポストバックが返ってきたら、メールアドレスを取得しようとします。

public ActionResult LogIn()
    {
        var redirectUrl = "~/Companies/LogIn/OpenIdLogOn";
        var response = Response;
        var userEmail = Request.Params[16];
        if (!String.IsNullOrEmpty(ReturnUrl))
        {                
            Response.Redirect("~/Bloggers");
        }

        ViewBag.OAuthProviders = OpenAuth.AuthenticationClients.GetAll().ToList();
        return View();
    }

Googleでログインすると、次のようになります-

var userEmail = Request.Params[16];

しかし、Facebookはメールを送り返しません。リクエストでそれを見ることができません。これを行うには、も使用するよりも良い方法があるはずRequest.Params[16]; です。助けていただければ幸いです。

4

1 に答える 1

1

何が何であるかを確認できなければOpenAuth、新しいコードがどのように見えるべきかを言うのは非常に困難です。ただし、リクエストからメールアドレスを直接取得することは絶対にしないでください。そうなると、OAuth と OpenID によって提供されるセキュリティはすべて無意味になります。使用しているセキュリティ ライブラリから電子メール アドレスを取得する必要があります。

Google にとって、これはレスポンスのFetchResponseまたはClaimsResponse拡張機能から取得することを意味します。

Facebook の場合、ログインから返されたアクセス トークンを使用して Facebook から電子メール アドレスを取得し、オーディエンス フィールド検証して、アクセス トークンがユーザー スプーフィング攻撃の一部としてサイトにリダイレクトされていないことを確認します。

于 2013-02-03T14:47:34.667 に答える