问题标签 [authlib]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
0 回答
866 浏览

python - 使用来自外部第三方 OAUTH 2.0 授权服务器的 OAUTH 2.0 访问令牌的 Python Flask Rest API 授权

我已经使用 python 3.7 和烧瓶构建了一个 rest api 后端。我想为我的 api 端点添加授权。

这些 api 将被另一个应用程序(机器到机器流)调用。调用应用程序应在 Authorization 标头中发送具有正确范围的 OAuth 2.0 访问令牌。

其余的 api 后端预计会从标头中获取访问令牌,通过调用其自省端点从外部授权服务器自省,如果一切正常,则允许访问该资源。

我能够自己实现所有这些,但现在计划为此目的使用一个库。我查看了https://docs.authlib.org/en/stable/但找不到关于我的用例的示例或文档。

有什么想法吗?谢谢。

0 投票
1 回答
142 浏览

authlib - 可以在没有 client_secret 的情况下使用 PKCE?

我正在尝试将 PKCE 与授权代码流一起使用。似乎身份验证代码流要求您使用 HTTP Basic 身份验证来发送 client_id 和 client_secret (因此您必须将 client_secret 客户端存储在某处)。这是真的,还是可以使用 auth_code/PKCE 流而不在代码中存储 client_secret?在Okta 的这个页面上,它说

所以这使得在 auth_code 流中似乎不需要 client_secret 是可能的。

但是从我的测试来看,该方法似乎create_token_response 需要发送 client_secret,否则会引发Invalid Client错误。由于客户端拥有代码验证器,因此我不了解该客户端机密的需要。

0 投票
1 回答
198 浏览

flask - 即使遵循不和谐 oauth2 的工作示例,authlib 也会引发 invalid_client 异常

我构建了一个烧瓶应用程序,该应用程序使用 oauth2 登录不和谐,并显示用户的用户名和个人资料图片。我按照示例https://docs.authlib.org/en/latest/client/frameworks.html#using-oauth-2-0-to-log-in 并使用不和谐的 oauth 信息对其进行了自定义。

invalid_client即使我的程序是正确的,我仍然不断收到 authlib 抛出的异常

0 投票
1 回答
536 浏览

python - Authlib 与 Azure AD - “iss”声明的声明验证错误

我曾经使用Flask-OAuthlib,但由于不再支持,我已经切换到Authlib和 Flask。我正在使用 OpenID Connect 支持和 OpenID 配置链接(与此示例几乎相同:https://github.com/authlib/demo-oauth-client/blob/master/flask-google-login/app。 py )。它与 Google 完美配合,但是,我遇到了 Azure AD 的问题。我已经设置好一切,流程运行,Azure 完成整个登录并询问权限。client.parse_id_token()但是,一旦通过,Authlib 本身会在方法中引发错误,同时iss从返回的 ID 令牌验证声明。

引发的错误是authlib.jose.errors.InvalidClaimError: invalid_claim: Invalid claim "iss". 使用 Flask 的调试器并阅读_validate_claim_value()函数的源代码,我确认它正在尝试与https://login.microsoftonline.com/{tenantid}/v2.0'相同的 URL 进行比较,但{tenant}替换为固定的 GUID(根据https://docs.microsoft.com/en-us上的文档/azure/active-directory/develop/id-tokens)。

我的猜测是我的应用程序应该以某种方式在这里进行替换,然后让验证进行,但是,我不知道该怎么做。问题是:在验证声明之前,Authlib 中是否有一种好方法可以做到这一点?

PS:我已经看到并知道loginpass,但想先探索一下使用股票 Authlib,因为这是一个现有的应用程序,如果可能的话,我不想把蓝图弄得这么乱。

0 投票
1 回答
207 浏览

flask - 在 OAuth2 中,如果一个客户端不应该共享其访问令牌,那么多个客户端如何访问同一个资源?

我正在创建一个带有不和谐 oauth 2 登录的烧瓶后端的反应 SPA。我想知道可用于烧瓶的当前用户的不和谐用户 ID,并使用 SPA 显示有关用户的信息,例如用户名和个人资料图片。

如果我通过烧瓶设置登录页面,我可以通过查询当前用户不和谐 API 来获取有关登录用户的信息。但是如何在 SPA 中获取姓名和头像?我可以将烧瓶获得的访问令牌提供给 SPA,但不建议共享令牌。

另一种方法是隐式授权流程,其中 SPA 获取访问令牌并将其提供给烧瓶。然后 Flask 可以检查谁登录了。这还涉及 ouath2 客户端之间的令牌共享,不推荐。

我不确定如何在无需用户多次登录的情况下获取烧瓶和 SPA 的访问令牌

0 投票
0 回答
136 浏览

python - Dexcom API Oauth2 回调失败

我正在尝试让一个简单的 Flask 应用程序与 Dexcom 的沙盒 API ( https://developer.dexcom.com ) 一起使用。我很难通过 OAuth2 获得授权。

我在他们的网站上注册了我的应用程序并拥有 client_id 和 client_secret。我还将回调设置为http://127.0.0.1:5000/authorize

该应用程序能够重定向到 Dexcom 的授权页面。问题是一旦按下授权按钮,应用程序就会在回调中崩溃并出现内部服务器错误。但是,授权代码在浏览器 URL 中可见。以下是终端中显示的内容。

authlib.integrations.base_client.errors.OAuthError: invalid_client: invalid_client

在浏览器调试器中,我没有看到带有授权代码和 client_secret 的请求。

下面是代码。

0 投票
0 回答
265 浏览

python - 刷新令牌导致 OAuthError

我正在使用 Authlib 库构建与 Github 的集成,并且需要刷新访问令牌。我在 Authlib 库中调用 refresh_token() ,如下所示:

但它始终会导致 OAuthError。这是完整的堆栈跟踪:

在获取访问令牌和尝试刷新它之间,我没有卸载 Github 应用程序。关于我可能做错了什么的任何想法?

0 投票
1 回答
29 浏览

python-3.x - 在 .register flask_client 上设置访问令牌

我已经在文档和 DuckDuckGo 中搜索了一段时间,但我找不到如何做到这一点。

我想在注册函数或从“数据库”获取它的其他地方设置令牌,所以我不必再次登录,而是恢复旧的。我一直无法找到明确的答案。

先感谢您。

0 投票
1 回答
126 浏览

python - 使用 python authlib 解析 id_token 时出现 UnsupportedAlgorithmError

我有一个 oauth/oidc 服务器和一个客户端,都使用 authlib 0.14.3 和烧瓶集成。服务器使用 HS256 对 id_token 进行签名。客户端具有这些端点:

parse_id_token提高一个UnsupportedAlgorithmError。使用调试器我发现authlib/jose/rfc7515/jws.py:JsonWebSignature._algorithms只有RS256可用的。

我错过了什么吗?

0 投票
0 回答
87 浏览

oauth-2.0 - 401 使用 authlib AsyncOAuth2Client 的未经授权的响应

我正在尝试使用 AsyncOAuth2Client 客户端对请求进行身份验证:

然后随后使用客户端发出请求:

但是,当调用上述方法时,我不断收到 401 回复:<Response [401 Unauthorized]>尽管事实上当我查看expires_at令牌时仍然有足够的时间来处理它:

可能与我昨天最初成功地尝试了相同的方法有关,设置它timeout=None并且它起作用了。但是,今天在尝试相同的代码时,我遇到了这些失败。