我们有一个Django应用程序托管在GCP云上运行,并位于IAP后面进行用户认证。我们的用例是在获得令牌后,由用户在本地机器上生成令牌。遵循IAP程序认证,但得到以下错误。
Invalid IAP credentials: JWT audience doesn't match this application ('aud' claim (xxxxxxxx.apps.googleusercontent.com) doesn't match expected value (yyyyyyyy.apps.googleusercontent.com)
预期结果是一个JSON响应,其中包含token。
我们通过将'audience' body参数传递给以下代码并调整GCP提供的原始文档来解决以下问题:
curl --verbose
--data client_id=DESKTOP_CLIENT_ID
--data client_secret=DESKTOP_CLIENT_SECRET
--data code=AUTH_CODE
--data redirect_uri=http://localhost:4444
--data audience=IAP_OAUTH_ID
--data grant_type=authorization_code
https://oauth2.googleapis.com/token
这个IAP_OAUTH_ID是在你打开IAP时由GCP自动生成的,并且出现在OAuth 2.0客户端id下在api &服务比;GCP的凭据部分
我们的猜测是,当我们尝试使用本地机器为IAP生成令牌而不在主体中传递"受众"时,它确实会生成令牌,但对于其他一些IAP实例,显然不会与托管在GCP上的令牌一起工作,GCP位于云运行负载均衡器前面。
因此,为了使其正常工作,还必须传递用于生成令牌的IAP实例,这是使用受众主体参数完成的。