矛魚盾

Facebook登入-手動建立登入 OAuth 2

Facebook登入-手動建立登入 OAuth 2 開放授權(OAuth)是一個開放標準,很多大公司提供的第三方驗證,不外乎都是這樣的流程,應該也是目前最廣泛被採用的第三方應用存取授權機制標準,Facebook當然也不例外有手動建立登入流程 。 這邊就不介紹OAuth,如果有興趣,我在參考的部分,放置了一篇微軟官方的介紹,另外也有不少Blog具有相當詳細的介紹,之後看有沒有機會也來寫一篇OAuth…(實現率不高,不喜歡太多文字的說明,且別人寫得非常完整了…) Note 記得要先到https://developers.facebook.com/apps/ 建立應用程式服務 實作 取得叫用「登入」對話方塊與設定重新導向網址 1 2 3 4 5 6 7 public IActionResult Index() { // 叫用「登入」對話方塊與設定重新導向網址 State = Guid.NewGuid(); ViewData["FacebookAuth"] = $"https://www.facebook.com/v8.0/dialog/oauth?client_id={_appId}&redirect_uri={RedirectUrl}&state={State}"; return View(); } 然後前台簡單建立一個連結按鈕 1 <a href="@ViewData["FacebookAuth"]" class="btn btn-primary" title="Log in your account">Facebook</a> 點了之後一樣會出現登入介面(記得Facebook要先登出,才會顯示登入畫面) 使用者輸入完後,會導回我們剛剛設定的回傳網址 這邊重點在於取得code(預設) 或 token,要取得哪項可以設置response_type,須注意這兩者取得權杖的方式不同,code是用使用代碼交換存取權杖,token則是要驗證,我直接使用預設 傳送使用代碼交換存取權杖 重點就在於這個權杖,有了權杖後,我們就可以使用Facebook Graph API,取得用戶資料,能取得哪些用戶資料,與版本有關,所以建議API加上版本號,我這邊只取最基本的ID、Name、Email 使用Facebook Graph API取得用戶資料,資料部分參考有連結 接下來就是一般的登入流程,看是否寫進資料庫、判斷是否第一次登入等 完整程式碼 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 public class LoginController : Controller { // 這邊要改你申請的應用程式編號及密鑰 private readonly string _appId = "{應用程式編號}"; private readonly string _appSecret = "{應用程式密鑰}"; private readonly IHttpClientFactory _clientFactory; public LoginController(IHttpClientFactory clientFactory) { _clientFactory = clientFactory; } private string RedirectUrl => "https://" + HttpContext.

Facebook登入-.NET Core Identity簡化版

Facebook登入-.NET Core Identity簡化版 這部分算是意外之喜,跑完Facebook SDK 後,想起原本.NET就有提供Identity認證機制,想試試看是不是可以不要那套流程,單是把第三方驗證功能抽出來用,稍微研究後,並參考其他人寫法後,發現並沒有想像中複雜,順便做個紀錄。 這麼一來就不需要那個龐大的Identity系統,微軟官方提供的ASP.NET Identity相當完整,但對於已經有自己的登入流程專案來說,採用這套系統不符合效益,整合上太複雜,小型專案在採用上也感覺過於大材小用,多出得資料表也太礙事了…。 環境 .NET Core 3.1 Nuget > Microsoft.AspNetCore.Authentication.Facebook Note 記得要先到https://developers.facebook.com/apps/ 建立應用程式服務 本篇在新增專案時,並未啟用「個別使用者帳戶」 實作 先安裝Microsoft.AspNetCore.Authentication.Facebook Startup.cs 中設置服務,注意這邊與官方的不同,我們其實是走Cookie驗證 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 services.AddAuthentication(options => { options.DefaultAuthenticateScheme = CookieAuthenticationDefaults.AuthenticationScheme; options.DefaultChallengeScheme = CookieAuthenticationDefaults.AuthenticationScheme; options.DefaultSignInScheme = CookieAuthenticationDefaults.AuthenticationScheme; }).AddFacebook(facebookOptions => { // 可從appsettings.json讀取,或是使用官方提供的秘密管理員 facebookOptions.AppId = "{應用程式編號}"; facebookOptions.AppSecret = "{應用程式密鑰}"; // 位於Facebook應用程式 設定 > 基本資料底下 facebookOptions.AccessDeniedPath = "/Home/Index"; }).

Facebook登入-Facebook SDK API

Facebook登入-Facebook SDK API 這陣子在統一第三方驗證寫法,試做了幾種OAuth Login,剛好紀錄一下流程,Facebook Login是我第一個的接觸,最簡單的方法莫過於Facebook官方的SDK,如果建立應用程式服務的畫面與你目前使用的不同,很可能是官網改版了 環境 Facebook Graph Api v8.0 Note API版本變動很快,可能與內容已有落差,建議先看官方目前的範例 Facebook 開發人員應用程式 https://developers.facebook.com/docs/facebook-login/web/ 建立應用程式服務 至https://developers.facebook.com/apps/ 建立應用程式 產品 > 建立Facebook 登入 設定 > 設定重新導向URI,這個是回傳路徑,應用程式到這邊就初步建立完畢了 實作 至https://developers.facebook.com/docs/facebook-login/web/ 尋找完整程式碼範例,替換{app-id} (就是剛剛申請的應用程式編號) 和{api-version},直接貼上就可以運作 1 2 3 4 5 6 7 8 9 10 <div class="fb-login-button" data-size="large" data-button-type="continue_with" data-layout="default" data-auto-logout-link="false" data-use-continue-as="false" data-width="" scope="public_profile,email" onlogin="checkLoginState();"> </div> 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 <script> function statusChangeCallback(response) { console.