Google OAuth2 - 正确用法?
Google OAuth2 - Correct Usage?
我正在开发使用 Google OAuth2 保护的 REST API(如果重要的话使用 java)。做法如下:
- UI 正在通过 Google 进行身份验证并且具有:
google id
+ token id
,
google id
+ token id
都在每个请求上发送到 API 作为 headers,
- REST API 使用 URL https://www.googleapis.com/oauth2/v3/tokeninfo?id_token=token_id 获得 JSON 类似于下面(其中
token_id
来自请求 header):
JSON:
{
"iss": "accounts.google.com",
"iat": "14791197651",
"exp": "14795233651",
"at_hash": "xDLxhM85hTYU0KwU-rhPgg",
"aud": "541950199239-s1fag9iaes0s99g4feipe0ih0l75km1l.apps.googleusercontent.com",
"sub": "197763402127980067798",
"azp": "541950819239-s5fag9iaes9s99g4feipe0ih0l75km1l.apps.googleusercontent.com",
"alg": "RS256",
"kid": "db9e3d7cdd1b4178010f89af11cfd37400061afc"
}
并将 sub
值与请求 header、
中的 google id
进行比较
- 如果检查通过并且
google id
的用户在我们的数据库中,则用户被授权使用 REST API(可能应用其他逻辑)。
工作流程是否正确或是否需要进行额外检查?
在此先感谢您的帮助。
查看 Google documentation,如果您要使用 tokeninfo
端点(您就是),您只需要 id_token
,并且那么你还必须
check that the aud claim contains one of your app's client IDs
这样您不仅可以验证令牌,还可以确保它确实是为您的客户准备的。
因此,您只需从 sub
声明中提取用户的唯一 Google ID,无需将其与客户端收到的 ID 进行匹配。
我正在开发使用 Google OAuth2 保护的 REST API(如果重要的话使用 java)。做法如下:
- UI 正在通过 Google 进行身份验证并且具有:
google id
+token id
, google id
+token id
都在每个请求上发送到 API 作为 headers,- REST API 使用 URL https://www.googleapis.com/oauth2/v3/tokeninfo?id_token=token_id 获得 JSON 类似于下面(其中
token_id
来自请求 header):
JSON:
{
"iss": "accounts.google.com",
"iat": "14791197651",
"exp": "14795233651",
"at_hash": "xDLxhM85hTYU0KwU-rhPgg",
"aud": "541950199239-s1fag9iaes0s99g4feipe0ih0l75km1l.apps.googleusercontent.com",
"sub": "197763402127980067798",
"azp": "541950819239-s5fag9iaes9s99g4feipe0ih0l75km1l.apps.googleusercontent.com",
"alg": "RS256",
"kid": "db9e3d7cdd1b4178010f89af11cfd37400061afc"
}
并将 sub
值与请求 header、
google id
进行比较
- 如果检查通过并且
google id
的用户在我们的数据库中,则用户被授权使用 REST API(可能应用其他逻辑)。
工作流程是否正确或是否需要进行额外检查?
在此先感谢您的帮助。
查看 Google documentation,如果您要使用 tokeninfo
端点(您就是),您只需要 id_token
,并且那么你还必须
check that the aud claim contains one of your app's client IDs
这样您不仅可以验证令牌,还可以确保它确实是为您的客户准备的。
因此,您只需从 sub
声明中提取用户的唯一 Google ID,无需将其与客户端收到的 ID 进行匹配。