尝试使用 Google 身份提供商登录 Openshift 4.5 时出现 401 Unauthorized

401 Unauthorized when trying to log on to Openshift 4.5 with Google identity provider

我最近部署了一个 4.5 版本的 OKD 集群,一切似乎都很好,但我无法让 Google 身份提供者进行登录。 我按照说明 here 进行了操作,但没有成功。 当我尝试使用我的公司 google 身份登录时,我收到一条非常普遍的错误消息:

login error

我最终得到了以下 OAuth 配置:

spec:
  identityProviders:
  - google:
      clientID: <my-ID>.apps.googleusercontent.com
      clientSecret:
        name: google-secret
      hostedDomain: <company domain>
    mappingMethod: claim
    name: googleidp
    type: Google

我也按照描述设置了 google 项目。刚刚创建了 Oauth2.0 凭据,回调 URL(这是正确的,因为我在同意屏幕后回到 OKD),没有额外的同意范围;只是个人资料、电子邮件和 openid,OKD 没有请求任何其他范围。 该项目设置为内部,因此只有公司用户可以登录。

经过一些调查后,我设法增加了 oauth-openshift pods 的详细程度,这是在日志中看到的失败尝试的内容:

       1 handler.go:156] Got auth data
I0929 15:30:10.036799       1 round_trippers.go:423] curl -k -v -XPOST  -H "Content-Type: application/x-www-form-urlencoded" -H "Accept: application/json" 'https://www.googleapis.com/oauth2/v3/token'
I0929 15:30:10.071829       1 round_trippers.go:443] POST https://www.googleapis.com/oauth2/v3/token 401 Unauthorized in 35 milliseconds
I0929 15:30:10.071871       1 round_trippers.go:449] Response Headers:
I0929 15:30:10.071879       1 round_trippers.go:452]     Server: scaffolding on HTTPServer2
I0929 15:30:10.071885       1 round_trippers.go:452]     Cache-Control: private
I0929 15:30:10.071891       1 round_trippers.go:452]     X-Content-Type-Options: nosniff
I0929 15:30:10.071897       1 round_trippers.go:452]     Vary: Origin
I0929 15:30:10.071902       1 round_trippers.go:452]     Vary: X-Origin
I0929 15:30:10.071909       1 round_trippers.go:452]     Vary: Referer
I0929 15:30:10.071915       1 round_trippers.go:452]     Date: Tue, 29 Sep 2020 15:30:10 GMT
I0929 15:30:10.071920       1 round_trippers.go:452]     Alt-Svc: h3-Q050=":443"; ma=2592000,h3-29=":443"; ma=2592000,h3-27=":443"; ma=2592000,h3-T051=":443"; ma=2592000,h3-T050=":443"; ma=2592000,h3-Q046=":443"; ma=2592000,h3-Q043=":443"; ma=2592000,quic=":443"; ma=2592000; v="46,43"
I0929 15:30:10.071926       1 round_trippers.go:452]     Content-Type: application/json; charset=utf-8
I0929 15:30:10.071934       1 round_trippers.go:452]     X-Xss-Protection: 0
I0929 15:30:10.071939       1 round_trippers.go:452]     X-Frame-Options: SAMEORIGIN
I0929 15:30:10.072004       1 handler.go:176] Error getting access token: Unauthorized
E0929 15:30:10.072031       1 errorpage.go:26] AuthenticationError: Unauthorized
I0929 15:30:10.072428       1 httplog.go:90] verb="GET" URI="/oauth2callback/googleidp?state=**token**&code=**token**&scope=email%20profile%20openid%20https://www.googleapis.com/auth/userinfo.email%20https://www.googleapis.com/auth/userinfo.profile&authuser=0&hd=**companydomain**&prompt=consent" latency=35.835162ms resp=200 UserAgent="Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/85.0.4183.83 Safari/537.36" srcIP="10.129.2.28:49228": 

我找不到未授权错误的原因,非常感谢任何帮助。

在 Google 云控制台而不是开发人员控制台中执行完全相同的操作,这终于成功了。所以OKD平台没有问题。

https://console.developers.google.com

https://console.cloud.google.com

在开发者控制台中创建项目时,一些设置被遗漏了。我发现我必须在第一个项目中添加 Google 云 API,但这还不足以使其正常工作,所以我将只使用新项目,因为我没有更多时间投资于此。