Google 身份验证 Android 应用程序和 C# 后端
Google Authentication Android App and C# Backend
我想开发一个 android 应用程序,用户可以在其中使用他的 Google 帐户进行身份验证。然后我想在我的 C# 后端中也使用 Google 帐户详细信息(不是为了访问 Google API,至少现在是这样,而是为了节省额外的用户管理系统)。传输层将是 gRPC。
似乎有很多方法可以做到这一点,我暂时选择了以下方法:
- 在 Android 中使用 GoogleSignIn 客户端允许用户登录。我从 SignIn 客户端获取帐户详细信息作为 ID 令牌(实际上是 JWT)
- 将 JWT 与 gRPC 调用一起作为元数据发送(在 RequestHeader 中)
- 在 C# 后端提取 JWT,并使用 Google.Apis.Auth nuget 包中的 GoogleJsonWebSignature.ValidateAsync 对其进行验证。这 returns 我在后端需要的所有相关信息。
一开始这一切都非常简单,而且效果很好。唯一的缺点是 JWT 最终会过期并需要刷新 :-(。我他妈的该怎么做?
这是一个好方法吗?还有其他方法可以做得更好吗?如何刷新 JWT?
BR,
丹尼尔
当 JWT 过期时,您应该能够重新启动您自己的客户端身份验证流程,并通过再次调用 GoogleSignIn.getIdToken() 从客户端获取新的 JWT。
相关地,您可以明确授权服务器获取刷新令牌(请参阅 Android: How to get Refresh Token by Google Sign-In API?),但这只会让您的服务器代表用户进行 Google API 调用。由于您的主要用例是使用 GoogleSignIn 作为您自己的 client/server 应用程序的用户管理系统,因此您应该让客户端应用程序获取新令牌并将其重新发送到服务器进行验证。
我想开发一个 android 应用程序,用户可以在其中使用他的 Google 帐户进行身份验证。然后我想在我的 C# 后端中也使用 Google 帐户详细信息(不是为了访问 Google API,至少现在是这样,而是为了节省额外的用户管理系统)。传输层将是 gRPC。 似乎有很多方法可以做到这一点,我暂时选择了以下方法:
- 在 Android 中使用 GoogleSignIn 客户端允许用户登录。我从 SignIn 客户端获取帐户详细信息作为 ID 令牌(实际上是 JWT)
- 将 JWT 与 gRPC 调用一起作为元数据发送(在 RequestHeader 中)
- 在 C# 后端提取 JWT,并使用 Google.Apis.Auth nuget 包中的 GoogleJsonWebSignature.ValidateAsync 对其进行验证。这 returns 我在后端需要的所有相关信息。
一开始这一切都非常简单,而且效果很好。唯一的缺点是 JWT 最终会过期并需要刷新 :-(。我他妈的该怎么做?
这是一个好方法吗?还有其他方法可以做得更好吗?如何刷新 JWT? BR, 丹尼尔
当 JWT 过期时,您应该能够重新启动您自己的客户端身份验证流程,并通过再次调用 GoogleSignIn.getIdToken() 从客户端获取新的 JWT。
相关地,您可以明确授权服务器获取刷新令牌(请参阅 Android: How to get Refresh Token by Google Sign-In API?),但这只会让您的服务器代表用户进行 Google API 调用。由于您的主要用例是使用 GoogleSignIn 作为您自己的 client/server 应用程序的用户管理系统,因此您应该让客户端应用程序获取新令牌并将其重新发送到服务器进行验证。