AppleAuth 是一個非常簡單的 .NET 函式庫,它封裝了與 Apple 的 REST API 通訊以透過 Apple 登入的邏輯。主要目標是讓任何 Web 應用程式都能更輕鬆地實現 Sign in with Apple。
若要安裝軟體包,請在軟體包管理器控制台中執行以下命令:
PM > Install - Package AppleAuth . NET
或只使用 Nuget 套件管理器安裝套件。該項目可以在這裡找到:NuGet 鏈接
為了使用“透過 Apple 登入”,您必須註冊 Apple 開發者計劃。註冊此計劃後,請前往開發者帳戶協助並導覽至設定應用程式功能 > 使用 Apple 登入。您可以在其中找到為您的應用程式設定「使用 Apple 登入」的資訊。
您也可以查看我的博文,以了解有關在開發者帳戶中設定設定以實現「使用 Apple 登入」的更多資訊。
接下來,您必須設定您的網頁以使用 Apple 登入。請遵循官方文件中的指南。您也可以參考此連結以了解如何設定按鈕的樣式。
如果您要將應用程式部署到 Azure Web App,請確保新增下列設定: WEBSITE_LOAD_USER_PROFILE = 1
,以便 IIS 可以存取使用者帳戶儲存下的私鑰儲存體。您可以從 Azure 入口網站的「設定」>「應用程式設定」套用此命令,也可以在 Cloud Shell 中執行下列命令:
az webapp config appsettings set --name <app-name> --resource-group <resource-group-name> --settings WEBSITE_LOAD_USER_PROFILE=1
。
另請務必注意,此設定僅適用於非共用定價層。
如果您要將應用程式部署到自己的網頁伺服器並執行 Microsoft IIS,則需要在應用程式集區的「進階設定」下啟用「載入使用者設定檔」。否則,您將收到 CryptographicException,指出「系統找不到指定的檔案」。
AppleAuthProvider.cs
建立AppleAuthProvider
的新實例,傳遞所需的參數,然後就可以開始了。使用GetAuthorizationToken
方法從Apple取得授權令牌;使用GetRefreshToken
方法驗證使用者是否仍在使用「使用 Apple 登入」登入您的系統;使用GetButtonHref
方法取得「使用 Apple 登入」按鈕的查詢字串。
用戶點擊頁面上的「使用 Apple 登入」按鈕後,他們將被重新導向到 https://appleid.apple.com/。他們提供憑證後,Apple 將向您指定為重定向 URL 的 URL 發出 POST 請求。您可以使用InitialTokenResponse.cs
處理請求。為了檢索授權令牌,您應該先使用所需的參數來建立AppleAuthProvider
的新實例。之後,只需呼叫 GetAuthorizationToken() 方法,傳遞來自InitialTokenResponse
物件和私鑰的code
。以下是 C# 中的範例實作:
[ HttpPost ]
public async Task HandleResponseFromApple ( AppleAuth . TokenObjects . InitialTokenResponse response )
{
string privateKey = System . IO . File . ReadAllText ( "path/to/file.p8" ) ;
AppleAuth . AppleAuthProvider provider = new AppleAuth . AppleAuthProvider ( "MyClientID" , "MyTeamID" , "MyKeyID" , "MyRedirectUrl" , "SomeState" ) ;
AppleAuth . TokenObjects . AuthorizationToken authorizationToken = await provider . GetAuthorizationToken ( response . code , privateKey ) ;
}
請記住,從 Apple 傳回的令牌是短暫的,因此您應該使用傳回的AppleAuth.TokenObjects.AuthorizationToken
物件在系統中建立會話或使用者。之後,您可以透過使用GetRefreshToken
方法檢索刷新令牌來驗證使用者是否仍使用「Sign in with Apple」登入:
[ HttpPost ]
public async Task < bool > IsUserUsingAppleID ( )
{
string privateKey = System . IO . File . ReadAllText ( "path/to/file.p8" ) ;
AppleAuth . AppleAuthProvider provider = new AppleAuthProvider ( "MyClientID" , "MyTeamID" , "MyKeyID" , "https://myredirecturl.com/HandleResponseFromApple" , "SomeState" ) ;
AppleAuth . TokenObjects . AuthorizationToken refreshToken = await provider . GetRefreshToken ( authorizationToken . RefreshToken , privateKey ) ;
return refreshToken != null ;
}
非常歡迎您為該專案做出貢獻並使其變得更好。貢獻時請盡量保持嚴格專業、尊重和友善的態度。還要確保您透過問題或任何其他方法與此儲存庫的擁有者傳達您想要進行的變更。
我們沒有任何建立拉取請求的嚴格準則,但您可以使用已知的 GitHub 流程作為一般準則。
該項目已獲得 MIT 許可證 - 請參閱 LICENSE.md 以了解詳細信息