在接收访问令牌时使用 amazon application load balancer 和 django oidc provider 对用户进行身份验证时总是得到 401 或 500

Posted

技术标签:

【中文标题】在接收访问令牌时使用 amazon application load balancer 和 django oidc provider 对用户进行身份验证时总是得到 401 或 500【英文标题】:Always getting 401 or 500 when authenticating users with amazon application load balancer and django oidc provider at receiving access token 【发布时间】:2019-12-03 22:35:39 【问题描述】:

在收到 access_token、refresh_token 和 id_token 后,我无法让 ALB 检查 /userinfo 端点

我正在尝试使用 Amazon ALB 和 django_odic_provider 对用户进行身份验证。我已经在 ALB 端设置了负载均衡器身份验证,测试了所有 oidc 端点(所有端点都可以访问并返回有效结果)。当我尝试进行身份验证时,我看到了 django 的登录视图,我成功进行了身份验证,但是从 django 的 oidc/token 端点返回时,我在负载均衡器的 oauth2/idpresponse 页面上得到 401 Unauthorized。

如果我尝试使用 Cognito 和联合 django_oidc_provider,我也成功登录并从授权返回到 oauth2/idpresponse 我收到 500 服务器错误消息:异常处理授权代码。在我看来,ALB 无法读取我的回复,但是当我检查它时,所有内容的格式都与文档中的一样,并且 jwt 没问题。

通过查看日志,负载均衡器似乎在从授权端点接收到 access_token、refresh_token 和 it_token 后从不检查令牌和用户信息端点。

我想了解负载均衡器如何解释此响应,以便尝试找出其中的问题。

这是令牌 endoint 响应:


'access_token': 'd90623245e474ee0b23a0a9ca062ba74', 
'refresh_token': '4d439d3249e64cbe9975310f84431c25', 
'token_type': 'Bearer', 
'expires_in': 3600, 
'id_token': 'eyJ... clipped ...uS9FSA'

这是解码的 jwt 令牌:


  "iss": "http://******/openid",
  "sub": "4",
  "aud": "170710",
  "exp": 1564065189,
  "iat": 1564064589,
  "auth_time": 1564063978,
  "at_hash": "KR6H0NlP_UQMXB1jDnpj-g",
  "email": "*****@*********.com"

我当然已经剪掉了敏感数据。

您能否建议我接下来应该检查什么以尝试解决此问题。

【问题讨论】:

【参考方案1】:

已解决。该 URL 是从请求本身中提取的,出于某种原因将 https 转换为 http 使 .well-known/openid-configuration 无效。

【讨论】:

以上是关于在接收访问令牌时使用 amazon application load balancer 和 django oidc provider 对用户进行身份验证时总是得到 401 或 500的主要内容,如果未能解决你的问题,请参考以下文章

在预认证用户的情况下如何使用 amazon cognito 获取刷新令牌

为啥 Amazon Cognito 不在其访问令牌中返回受众字段?

使用 amazon cognito 域 UI(从用户池生成)登录后未获得 cognito 访问令牌?

我正在使用 Spotify api,但无法从重定向 api 接收访问令牌“代码”

在 AWS Cognito 和 Lambda 中获取 Facebook 访问令牌

无法从亚马逊获取访问令牌