问题标签 [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 投票
1 回答
79 浏览

python - 值得信赖的客户

我需要使用 Authlib 在 SSO 中添加受信任的客户端。这些客户端是我系统的一部分,我不需要用户确认。现在,我使用下一个代码进行授权:

但是我如何预先注册我的所有客户,让他们自动确认?

0 投票
1 回答
2281 浏览

python - 客户端无权使用此方法请求授权码

我需要在 GET 请求 Authlib 上生成一个授权令牌。用户不需要确认对资源的访问,因为它是封闭的网络,只有受信任的服务(我们的服务)可以发送请求。
使用此OAuth 2.0 Provider示例
,我编写了下一个: 在路由中:

我的oauth模块:

但是当我尝试发送请求时:

服务器返回错误:

我启用了不安全的传输模式,并且该客户端已在数据库中注册。我client_id从数据库中取出了它select client_id from clients。它说客户端是授权的,但我想授权它,当然,它是未经授权的。怎么了?
PS 我的仓库

添加:
我需要response_type为客户指定。

0 投票
0 回答
57 浏览

python - 应用程序在请求访问令牌时崩溃

我正在尝试使用我的授权码获取访问令牌:

我在请求授权码时 传递了state参数:

但我的身份验证服务响应:

我在调试模式下检查了执行,Authlib 正在尝试获取状态OAuthRequest但找不到它。
我不明白我做错了什么?

路线:

0 投票
0 回答
102 浏览

python - 如何验证受信任资源服务器的 access_token?

我有授权服务器和资源服务器...当客户端向资源服务器发送请求时,我的资源服务器必须向授权服务器发送请求以验证令牌是否仍然有效。
但是如何使用 Authlib 进行验证呢?我在他们的文档中找不到示例...
简而言之,我需要以下内容:

在发布请求时:

如何实现这样的路线?

PS对我来说可以接受任何变体,只是现在我完全不知道如何验证令牌。

0 投票
2 回答
1143 浏览

python-3.x - 将“flask_oauthlib.client”更新/转换为“authlib.flask.client” - 无需用户即可访问 Microsoft Graph v2

我的目标是实现这一点: https ://github.com/Azure-Samples/active-directory-python-flask-graphapi-web-v2

使用较新的 Authlib 库。 https://github.com/lepture/authlib

我需要一个使用证书(无用户登录)进行身份验证并使用 Microsoft 的 Graph API 从 Azure AD(v2.0 端点)SharePoint 文档库中获取数据的应用程序。

这是使用“flask_oauthlib”的原始代码:

这是我到目前为止更新为“authlib.flask”的代码:

我坚持的部分是如何处理:

来自“将 OAuth 客户端从 Flask-OAuthlib 迁移到 Authlib”中的 Authlib 文档说明如下:

如果您想使用 oauth.twitter.get(...) 之类的方法访问资源,则需要确保有一个可以使用的访问令牌。这部分在 Flask-OAuthlib 和 Authlib 之间非常不同。

在 Flask-OAuthlib 中,它由装饰器处理:

tokengetter 返回的令牌可以是元组或字典。但是在 Authlib 中,它只能是一个 dict,并且 Authlib 不使用装饰器来获取令牌,而是应该将此函数传递给注册表:

https://blog.authlib.org/2018/migrate-flask-oauthlib-client-to-authlib

我不知道如何处理“@microsoft.tokengetter”

有没有人有什么建议?

0 投票
0 回答
489 浏览

python-3.x - Authlib 令牌过期

我正在使用 Authlib 在我的应用程序中创建 OAuth 流。过期时间不起作用,例如,如果我得到示例的代码并将过期时间设置为 1800:

我仍然收到过期时间为 864000 秒的令牌。如何解决这个问题?我尝试设置 Flask 会话的到期时间,但它仍然无法正常工作

0 投票
1 回答
233 浏览

python - 两个装饰器产生冲突

我需要使用两个装饰器,但它们相互冲突。这是我的路线:

require_oauth = ResourceProtector()来自Authlib ,使用webargs。 我通过cURL发送数据:@use_args

请求后我的应用程序崩溃了:

PS我试图改变装饰器的顺序,它也没有帮助,虽然它产生了一个新的堆栈跟踪:

0 投票
0 回答
87 浏览

oauth-2.0 - 在 Authlib 的示例 oauth2 服务器中,为什么 user_id 绑定到客户端元数据?

我正在使用 authlib 为 oidc 提供程序服务器。我使用example-oauth2-server作为学习工具。我试图理解为什么在数据库模式中,User_ID 与客户端相关联。我知道这是一个 oauth2 服务器,而不是 oidc。但混乱仍然存在。我是否打算为每个人类/服务用户注册一个客户?这不是 oauth2 或 oidc 的要求,对吧?事实上,oidc 客户端注册文档中根本没有关于与客户端元数据相关的 user_id 字段的内容。

在我使用的另一个 oidc 库中,由于缺少更好的短语,注册是“用户不可知的”。我无法理解为什么不应该这样。我的意思是,我可以为每个用户创建一个客户端,但是如果我想要一个能够通过我的 oidc 提供程序进行身份验证和授权的 Android 应用程序,我为什么要这样做呢?我不能通过将 user_id 存储在其他表中来实现类似的事情(假设目的是具体识别哪个用户正在登录,您可以通过所述特定用户正在登录的事实来确定)吗?

任何方向甚至讨论都将不胜感激。

0 投票
2 回答
1594 浏览

python - 用于 RESTfull API 的带有社交网络的 Python OAuth2 服务器

我正在尝试使用 Python 和 Falcon Web 框架通过社交平台(Github、Facebook、Instagram)为带有登录选项的 RESTfull API 实现 OAuth2 服务器。但我一直在努力理解这件事应该如何运作。

我目前的理解使我想到了以下方案: OAuth2 授权方案(使用社交平台)

1.1。在 API 方面,我正在创建一个端点/auth/login/github,它基本上会告诉移动应用程序将客户端重定向到 Github.com 授权页面 - github.com/login/oauth/authorize 1.2。在 Github 授权页面上,用户将看到以下屏幕: Github授权页面 1.3。按下授权后,用户将callback使用新授予的临时授权码进入参数(Github OAuth 服务配置)中指定的页面。在我的情况下,URL 将如下所示:my.api.com/auth/callback/github?code=AUTH_CODE

2.1。收到回调请求后,我正在解析/提取传递的授权码并从后端查询 Github.com 以兑换授权码并获取访问令牌(使用我的客户端 ID客户端密钥发送POST 请求github.com/login/oauth/access_token) 2.2。如果一切顺利,Github 将使用Access Token回复我的 POST 请求,我可以使用它来获取用户个人资料详细信息(例如电子邮件)

3.1。现在我知道通过 Github 的授权是成功的(因为我收到了用户的电子邮件),我可以向该用户授予我自己的访问令牌,这样他就可以查询我的 API 端点。我只是通过添加随机生成的OAuth2 令牌并将其插入到我的数据库中来做到这一点,同时通过使用深层链接(例如:myapp://token)将用户重定向到移动应用程序来将相同的令牌返回给用户。3.2. 最后,移动应用程序可以通过向每个请求添加以下标头来查询我的 API 端点Authorization: Bearer 0b79bab50daca910b000d4f1a2b675d604257e42

这有意义吗?这是对 RESTfull API 进行社交授权的正确方法吗?

我使用Falcon作为该项目的 Web 框架,使用Authlib作为 OAuth2 库。

0 投票
0 回答
217 浏览

python - OAuth 2 身份验证库。如何访问资源?

我已经设置了这个示例 OAuth2 服务器。它具有授权和一个资源 ( /api/me)。我也在用python制作一个客户端应用程序。我想出了如何获得令牌。但是当我尝试访问时,/api/me我得到了响应{"message":"401 Unauthorized: None"}。我可以说我把我的令牌作为参数放在 URL 中,并且我把它放在 FORM 中。它把它放在access_token钥匙下。我究竟做错了什么?显然它应该以某种方式工作?

这是我的客户端应用程序代码: