5

MVC 4 アプリケーションを任意のソーシャル ネットワーク プロバイダーと統合するように構成する方法と、ユーザーを認証する方法に関する非常に詳細な情報を含む多くの投稿や記事を見つけましたが、次は何をすればよいのでしょうか? たとえば、認証されたユーザーに関する情報を取得する方法は? 認証されたユーザーに関する情報を取得する方法が頭に浮かぶ最も簡単なタスク - 名、姓、アバターの URL、友達リストなど?

アップデート:

  1. ここにいくつかの光を共有する投稿記事があります
  2. Facebookとやり取りするための便利な記事
4

1 に答える 1

7

OAuth は、認証、つまりアクセス トークンの取得のみを目的としています。このアクセス トークンを取得したら、それを使用してサービス プロバイダーからこの情報を取得できます。これを行う方法については、プロバイダーのドキュメントを参照してください。

FirstName や LastName など、取得できるクレームがいくつかあります。これらは標準であり、ほとんどのプロバイダーがサポートしているためです。たとえば、コールバック内で、辞書ExternalLoginCallbackからこの情報を取得しようとすることができます。result.ExtraData

[AllowAnonymous]
public ActionResult ExternalLoginCallback(string returnUrl)
{
    AuthenticationResult result = OAuthWebSecurity.VerifyAuthentication(Url.Action("ExternalLoginCallback", new { ReturnUrl = returnUrl }));
    if (!result.IsSuccessful)
    {
        return RedirectToAction("ExternalLoginFailure");
    }

    if (OAuthWebSecurity.Login(result.Provider, result.ProviderUserId, createPersistentCookie: false))
    {
        return RedirectToLocal(returnUrl);
    }

    if (User.Identity.IsAuthenticated)
    {
        // Here you could use result.ExtraData dictionary
        string name = result.ExtraData["name"];


        // If the current user is logged in add the new account
        OAuthWebSecurity.CreateOrUpdateAccount(result.Provider, result.ProviderUserId, User.Identity.Name);
        return RedirectToLocal(returnUrl);
    }
    else
    {
        // User is new, ask for their desired membership name
        string loginData = OAuthWebSecurity.SerializeProviderUserId(result.Provider, result.ProviderUserId);
        ViewBag.ProviderDisplayName = OAuthWebSecurity.GetOAuthClientData(result.Provider).DisplayName;
        ViewBag.ReturnUrl = returnUrl;
        return View("ExternalLoginConfirmation", new RegisterExternalLoginModel { UserName = result.UserName, ExternalLoginData = loginData });
    }
}

ただし、異なるプロバイダーは異なるキーを使用する場合があります。そのため、使用されたプロバイダーによっては、適切なキーを使用して目的の情報を読み取る必要があります。

于 2013-02-23T17:59:45.250 に答える