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 了解详细信息