在接收访问令牌时使用 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 接收访问令牌“代码”