允许通过CKAN API进行无密码登录的扩展
项目描述
CKAN无密码API
允许通过CKAN API进行无密码登录的扩展。
文档: https://envidat.gitlab-pages.wsl.ch/ckanext-passwordless_api/
源代码: https://gitlabext.wsl.ch/EnviDat/ckanext-passwordless_api
此插件主要用于基于CKAN API构建的自定义前端。
通过使用CKAN核心的API令牌(>2.9),此插件提供了一种身份验证流程,其中
- 用户通过电子邮件(通过核心中的重置密钥)接收登录令牌。
- 在提交有效的登录令牌(重置密钥)后,将返回API令牌。
- 然后应在前端到CKAN调用的授权头中包含API令牌。
基于@espona(Lucia Espona Pernas)为ckanext-passwordless(https://github.com/EnviDat/ckanext-passwordless)所做的贡献。
还支持第二种登录流程,使用Azure AD
- 用户在前端通过授权代码流程(@azure/msal-browser或类似)登录。
- 将Azure令牌传递到Azure特定端点。
- 验证令牌并返回CKAN的API令牌。
- 然后应在前端到CKAN调用的授权头中包含API令牌。
安装
pip install ckanext-passwordless-api
配置
可以在您的ckan.ini中设置可选变量
- passwordless_api.guidelines_url
- 描述:指向您网站指南的链接。
- 默认值:无,不包含。
- passwordless_api.policies_url
- 描述:指向您网站政策的链接。
- 默认值:无,不包含。
- passwordless_api.welcome_template
- 描述:作为HTML电子邮件渲染的欢迎模板的路径。
- 默认值:使用默认模板。
- passwordless_api.reset_key_template
- 描述:作为HTML电子邮件渲染的密码重置密钥模板的路径。
- 默认值:使用默认模板。
- passwordless_api.cookie_name
- 描述:设置为将API令牌放入具有给定名称的cookie中。cookie默认为
secure
、httpOnly
、samesite: Lax
。 - 默认值:无,不使用cookie。
- 描述:设置为将API令牌放入具有给定名称的cookie中。cookie默认为
- passwordless_api.cookie_domain
- 描述:samesite要尊重的域,如果设置了cookie则需要。
- 默认值:无。
- passwordless_api.cookie_samesite
- 描述:将cookie samesite值更改为
Strict
。只有当您知道自己在做什么时才启用此选项。 - 默认值:无,samesite值设置为
Lax
。
- 描述:将cookie samesite值更改为
- passwordless_api.cookie_http_only
- 描述:使用httpOnly cookie,推荐。
- 默认值:true。
- passwordless_api.cookie_path
- 描述:设置特定路径以使用cookie,例如
/api
。 - 默认值:
/
(所有路径)。
- 描述:设置特定路径以使用cookie,例如
- passwordless_api.anonymous_usernames
- 描述:设置为true以在生成时匿名化用户名。
- 默认值:false。
- passwordless_api.anonymous_domain_exceptions
- 描述:不应匿名化的电子邮件域异常,如果启用。
- 默认值:无。
端点
POST
- <CKAN_HOST>/api/3/action/passwordless_request_reset_key
- 描述:为给定电子邮件请求登录令牌。
- 如果不存在,则创建用户并发送欢迎电子邮件。
- 参数1:email (str)。
- 描述:为给定电子邮件请求登录令牌。
- <CKAN_HOST>/api/3/action/passwordless_request_api_token
- 描述:给定电子邮件和登录令牌(reset_key)请求API令牌。
- 参数1:email (str)。
- 参数2:key (str)。
- <CKAN_HOST>/api/3/action/passwordless_request_api_token_azure_ad
- 描述:给定电子邮件和Azure AD令牌请求API令牌。
- 参数1:email (str)。
- 参数2:token (str)。
- <CKAN_HOST>/api/3/action/passwordless_revoke_api_token
- 描述:吊销API令牌。
- 参数1:token (str)。
GET
- <CKAN_HOST>/api/3/action/passwordless_revoke_api_token
- 描述:如果已登录,则吊销当前API令牌。
- <CKAN_HOST>/api/3/action/passwordless_get_user
- 描述:根据他们的API令牌获取用户详细信息。
- 也会重置并返回一个新的API令牌(即续订)。
- 如果用户未登录,则静默失败。
- 如果不需要刷新,请使用核心
user_show
操作。
- 描述:根据他们的API令牌获取用户详细信息。
- <CKAN_HOST>/api/3/action/passwordless_introspect
- 描述:验证API令牌是否对用户有效。
- 此操作不会在同一个调用中续订令牌。
- 主要用于微服务API中的认证检查。
- 描述:验证API令牌是否对用户有效。
在授权头中使用cookie
如果已配置,包含API令牌的cookie本身做不了太多。
可以通过前端JS提取cookie值并传递给CKAN后端,但这会使您的网站容易受到XSS攻击。
因此,cookie应以安全的方式存储
samesite=Lax
withdomain=YOUR_DOMAIN
以帮助防止CSRF。samesite=Strict
更为安全,但会显著影响您网站的UX。
secure
以帮助防止中间人攻击。httpOnly
以帮助防止XSS。- 设置此值意味着cookie不能再从您的JS代码中访问。
然后必须使用中间件将cookie值转换为CKAN可以解释的头
NGINX服务器示例(nginx是默认/推荐的CKAN反向代理服务器)(《https://docs.ckan.org/en/latest/maintaining/installing/deployment.html》)
# Add the cookie-based API token to the request Authorization header
# This is passed to the CKAN backend & read automatically by CKAN
proxy_set_header 'Authorization' $cookie_${AUTH_COOKIE_NAME};
# If using caching omit the cookie
proxy_cache_bypass $cookie_${AUTH_COOKIE_NAME};
proxy_no_cache $cookie_${AUTH_COOKIE_NAME};
Apache服务器示例
SetEnvIf Cookie "(^|;\ *)${AUTH_COOKIE_NAME}=([^;\ ]+)" ckan_cookie_value=$2
RequestHeader set Authorization "%{ckan_cookie_value}e"
注意
- 还建议禁用通过cookie访问API,以帮助防止CSRF攻击:
ckan.auth.disable_cookie_auth_in_api = true
- API令牌的配置可以在核心配置中设置
api_token.nbytes = 60
api_token.jwt.decode.secret = string:YOUR_SUPER_SECRET_STRING
api_token.jwt.algorithm = HS256
# expire_api_token plugin (unit = 1 day in seconds, lifetime = 3 days)
expire_api_token.default_lifetime = 3
expire_api_token.default_unit = 86400
项目详情
下载文件
下载您平台的文件。如果您不确定选择哪个,请了解更多关于安装包的信息。
源分发
ckanext-passwordless-api-1.1.8.tar.gz (15.9 kB 查看哈希值)
构建分发
关闭
ckanext-passwordless-api-1.1.8.tar.gz的哈希值
算法 | 哈希摘要 | |
---|---|---|
SHA256 | 0fc78db268f10f410640bdd3a080c5dd540454a809ea54dc564fa107f486148a |
|
MD5 | 00d0f464bf091ddabc431209a4ff6757 |
|
BLAKE2b-256 | c7bb736a40a3c33d3e9589952088af91d060cd9fe5d96e1a6d11c1c03eeb860e |
关闭
ckanext_passwordless_api-1.1.8-py3-none-any.whl的哈希值
算法 | 哈希摘要 | |
---|---|---|
SHA256 | 0ef9ef70c683899d75331bdb12c7f2aa62c9c0b4bd5864b31f37053cbdda299c |
|
MD5 | 2b703d2408c697778d31fa7bce2d2019 |
|
BLAKE2b-256 | 0dff4ff0051f0b553daab556733f2cbba735c9170228bb8b046bc79b4aa2277c |