Asp.net-Mvc

使用外部身份驗證提供程序從 MVC5 框架 OAuth/OWin 身份提供程序獲取 ExtraData

  • July 30, 2013

我正在嘗試在 VS 2013 預覽版中使用新的 MVC5 框架。

會員身份驗證框架已經過大修並替換為OWin.

特別是,我打​​開了外部身份驗證提供程序 Google auth。

這很簡單。

只需取消註釋此行: app.UseGoogleAuthentication();在新的預設 MVC 項目的 App_Start 目錄中的 Startup.Auth.cs 文件中。

因此,我想訪問來自身份驗證提供程序的“額外數據”,例如要在我的應用程序中顯示的使用者頭像的 url。

在針對 asp.net Membership 提供程序的舊 OAuth 實現下,有一種方法可以使用此處找到的 ExtraData 字典來擷取它:ProviderDetail.ExtraData Property

我找不到太多關於 OAuth 和 OWin 如何協同工作以及如何訪問這些額外數據的文件。

任何人都可以啟發我嗎?

最近我也不得不訪問Google個人資料的圖片,這就是我解決它的方法……

如果您只是啟用app.UseGoogleAuthentication();Startup.Auth.cs 文件中的程式碼,這還不夠,因為在這種情況下,Google 根本不會返回有關個人資料圖片的任何資訊(或者我不知道如何獲取它)。

您真正需要的是使用 OAuth2 集成而不是預設啟用的 Open ID。這就是我是如何做到的……

首先,您必須在 Google 端註冊您的應用並獲取“客戶端 ID”和“客戶端密碼”。完成此操作後,您可以走得更遠(稍後您將需要它)。如何在此處執行此操作的詳細資訊。

替換app.UseGoogleAuthentication();

   var googleOAuth2AuthenticationOptions = new GoogleOAuth2AuthenticationOptions
   {
       ClientId = "<<CLIENT ID FROM GOOGLE>>",
       ClientSecret = "<<CLIENT SECRET FROM GOOGLE>>",
       CallbackPath = new PathString("/Account/ExternalGoogleLoginCallback"),
       Provider = new GoogleOAuth2AuthenticationProvider() {
           OnAuthenticated = async context =>
           {
               context.Identity.AddClaim(new Claim("picture", context.User.GetValue("picture").ToString()));
               context.Identity.AddClaim(new Claim("profile", context.User.GetValue("profile").ToString()));
           }
       }
   };

   googleOAuth2AuthenticationOptions.Scope.Add("email");

   app.UseGoogleAuthentication(googleOAuth2AuthenticationOptions);

之後,您可以使用程式碼以與訪問任何其他屬性相同的方式訪問配置文件的圖片 URL

var externalIdentity = HttpContext.GetOwinContext().Authentication.GetExternalIdentityAsync(DefaultAuthenticationTypes.ExternalCookie);
var pictureClaim = externalIdentity.Result.Claims.FirstOrDefault(c => c.Type.Equals("picture"));
var pictureUrl = pictureClaim.Value;

引用自:https://stackoverflow.com/questions/17937553