Chainlit web UI的三种用户访问验证详解

news/2024/10/18 0:35:45/

概述

Chainlit 应用程序默认为公开。要启用身份验证并将您的应用程序设为私有,您需要:

定义一个CHAINLIT_AUTH_SECRET环境变量。这是一个用于签署身份验证令牌的秘密字符串。您可以随时更改它,但它会注销所有用户。您可以使用 轻松生成一个chainlit create-secret
向您的应用添加一个或多个身份验证回调:

  • 密码验证
    使用登录名/密码验证用户。

  • OAuth授权
    使用您自己的 OAuth 应用程序(如 Google等)对用户进行身份验证。

  • header验证
    根据自定义标头对用户进行身份验证。

每个回调接受不同的输入并可选地返回一个cl.User对象。如果回调返回None,则认为身份验证失败。

确保每个用户都有一个唯一的标识符,以防止他们共享其数据。

获取当前已认证的用户

您可以通过用户会话访问当前经过身份验证的用户。

@cl.on_chat_start
async def on_chat_start():app_user = cl.user_session.get("user")await cl.Message(f"Hello {app_user.identifier}").send()

密码验证

@cl.password_auth_callback从登录表单接收用户名和密码。返回一个对象cl.User将对用户进行身份验证,否则None将导致身份验证失败。

您可以根据您想要的任何服务(您自己的数据库、私人 Google 表格等)验证凭据。

这里适用通常的最佳安全做法,即在存储密码之前对其进行哈希处理。

例子

from typing import Optional
import chainlit as cl@cl.password_auth_callback
def auth_callback(username: uiltin">str, password: uiltin">str):# Fetch the user matching username from your database# and compare the hashed password with the value stored in the databaseif (username, password) == ("admin", "admin"):return cl.User(identifier="admin", metadata={"role": "admin", "provider": "credentials"})else:return None

OAuth授权

OAuth 允许您使用第三方服务来验证您的用户。

要激活 OAuth 提供程序,您需要在代码中定义 OAuth 回调和提供程序环境变量。

提供者

按照这些指南为您选择的提供商创建 OAuth 应用。然后将信息复制到正确的环境变量中以激活提供商。

如果您的应用程序在反向代理(如 cloud run)后面运行,则必须设置CHAINLIT_URL环境变量。例如,如果您将应用程序托管在https://mydomain.comCHAINLIT_URL则应将其设置为 https://mydomain.com

GitHub

转到此页面创建一个新的 GitHub OAuth 应用程序。

回调 URL 应为:CHAINLIT_URL/auth/oauth/github/callback。如果您的 Chainlit 应用托管在 localhost:8000,则应使用http://localhost:8000/auth/oauth/github/callback

您需要设置以下环境变量:

OAUTH_GITHUB_CLIENT_ID: 客户端 ID
OAUTH_GITHUB_CLIENT_SECRET: 客户端密匙

GitLab

转到此页面创建一个新的GitLab OAuth 应用程序。创建应用程序时,您需要允许openidprofileemail范围。

回调 URL 应为:CHAINLIT_URL/auth/oauth/gitlab/callback。如果您的 Chainlit 应用托管在 localhost:8000,则应使用http://localhost:8000/auth/oauth/gitlab/callback

您需要设置以下环境变量:

OAUTH_GITLAB_CLIENT_ID: 客户端 ID
OAUTH_GITLAB_CLIENT_SECRET: 客户端密匙
OAUTH_GITLAB_DOMAIN:域名(不带协议)

google 谷歌

转到此页面创建一个新的 Google OAuth 应用程序。

回调 URL 应为:CHAINLIT_URL/auth/oauth/google/callback。如果您的 Chainlit 应用托管在 localhost:8000,则应使用http://localhost:8000/auth/oauth/google/callback

您需要设置以下环境变量:

OAUTH_GOOGLE_CLIENT_ID: 客户端 ID
OAUTH_GOOGLE_CLIENT_SECRET: 客户端密匙

Azure Active Directory

按照本指南创建一个新的 Azure Active Directory OAuth 应用程序。

回调 URL 应为:CHAINLIT_URL/auth/oauth/azure-ad/callback。如果您的 Chainlit 应用托管在 localhost:8000,则应使用http://localhost:8000/auth/oauth/azure-ad/callback

您需要设置以下环境变量:

OAUTH_AZURE_AD_CLIENT_ID: 客户端 ID
OAUTH_AZURE_AD_CLIENT_SECRET: 客户端密匙
OAUTH_AZURE_AD_TENANT_ID:Azure 租户 ID

如果您的应用程序支持“仅限此组织目录中的帐户”(单租户),则需要明确设置: OAUTH_AZURE_AD_ENABLE_SINGLE_TENANT=true。如果不支持,则根本不要设置此环境变量。

Okta

按照本指南创建 OIDC 应用程序集成。

回调 URL 应为:CHAINLIT_URL/auth/oauth/okta/callback。如果您的 Chainlit 应用托管在 localhost:8000,则应使用http://localhost:8000/auth/oauth/okta/callback

您需要设置以下环境变量:

OAUTH_OKTA_CLIENT_ID: 客户端 ID
OAUTH_OKTA_CLIENT_SECRET: 客户端密匙
OAUTH_OKTA_DOMAIN:您的 okta 设置的域名 - 例如https://company.okta.com

有几种方法可以配置 Okta OAuth 路由:

当使用单点登录到 Okta设置时,您需要将OAUTH_OKTA_AUTHORIZATION_SERVER_ID环境变量设置为false
当使用 Okta作为您的应用或 API 的身份平台时:
如果你有开发者账户,请设置OAUTH_OKTA_AUTHORIZATION_SERVER_ID环境变量,default
或者将其设置为来自自定义授权服务器的授权服务器 ID。

Descope

前往Descope 注册页面,开始使用您的帐户并设置您的身份验证。

回调 URL 应为:CHAINLIT_URL/auth/oauth/descope/callback。如果您的 Chainlit 应用托管在 localhost:8000,则应使用http://localhost:8000/auth/oauth/descope/callback

您需要设置以下环境变量:

OAUTH_DESCOPE_CLIENT_ID:Descope项目ID,可以在控制台的项目设置下找到。
OAUTH_DESCOPE_CLIENT_SECRET:Descope Access Key,可以在控制台的Access Keys下创建。
​

Auth0

按照本指南创建 Auth0 应用程序。

回调 URL 应为:CHAINLIT_URL/auth/oauth/auth0/callback。如果您的 Chainlit 应用托管在 localhost:8000,则应使用http://localhost:8000/auth/oauth/auth0/callback

您需要设置以下环境变量:

OAUTH_AUTH0_CLIENT_ID: 客户端 ID
OAUTH_AUTH0_CLIENT_SECRET: 客户端密匙
OAUTH_AUTH0_DOMAIN:您的 auth0 设置的域名

可选的环境变量:

OAUTH_AUTH0_ORIGINAL_DOMAIN:如果您使用自定义域,则为 auth0 设置的原始域名

Amazon Cognito

按照本指南创建新的 Amazon Cognito 用户池。

回调 URL 应为:CHAINLIT_URL/auth/oauth/aws-cognito/callback。如果您的 Chainlit 应用托管在 localhost:8000,则应使用http://localhost:8000/auth/oauth/aws-cognito/callback

您需要设置以下环境变量:

OAUTH_COGNITO_CLIENT_ID: 客户端 ID
OAUTH_COGNITO_CLIENT_SECRET: 客户端密匙
OAUTH_COGNITO_DOMAIN: Cognito 域

示例

auth_187">允许所有通过oauth认证的用户。

from typing import Dict, Optional
import chainlit as cl@cl.oauth_callback
def oauth_callback(provider_id: uiltin">str,token: uiltin">str,raw_user_data: Dict[uiltin">str, uiltin">str],default_user: cl.User,
) -> Optional[cl.User]:return default_user

仅允许来自特定 Google 域的用户。

from typing import Dict, Optional
import chainlit as cl@cl.oauth_callback
def oauth_callback(provider_id: uiltin">str,token: uiltin">str,raw_user_data: Dict[uiltin">str, uiltin">str],default_user: cl.User,
) -> Optional[cl.User]:if provider_id == "google":if raw_user_data["hd"] == "example.org":return default_userreturn None

header验证

Header auth 是一种使用标头对用户进行身份验证的简单方法。它通常用于将身份验证委托给反向代理。

例子

from typing import Optionalimport chainlit as cl@cl.header_auth_callback
def header_auth_callback(headers: Dict) -> Optional[cl.User]:# Verify the signature of a token in the header (ex: jwt token)# or check that the value is matching a row from your databaseif headers.get("test-header") == "test-value":return cl.User(identifier="admin", metadata={"role": "admin", "provider": "header"})else:return None

http://www.ppmy.cn/news/1515783.html

相关文章

EXCEL 分段排序--Excel难题#86

Excel某表格有3列。 ABC1A1B1512A2B27213A3B33824A4B495A5B5736A6B65777A7B7918A13B131509A14B144910A17B1770211A18B1870512A34B343313A35B3540914A36B3657915A37B3710 现在要求对表格按照第3列进行分段排序,由小到大排列。第1段:第3列小于等于50&…

鸿蒙内核源码分析(异常接管篇) | 社会很单纯,复杂的是人

为何要有异常接管? 拿小孩成长打比方,大人总希望孩子能健康成长,但在成长过程中总会遇到各种各样的问题,树欲静而风不止,成长路上有危险,有时是自己的问题有时是外在环境问题.就像抖音最近的流行口水歌一样&#xff…

centos7安装Kafka单节点环境部署一-ZooKeeper安装与配置

由于Kafka运行需要zookeeper配合,zookeeper需要运行在JVM上,所以需要安装JDK,zookeeper。Kafka 从2.0.0版本开始就不再支持 JDK7 及以下版本,就以 CentOS 7 64位 JDK8 为例 1、下载ZooKeeper wget https://archive.apache.org/d…

探索C#的随机森林:内置随机数生成器的深度指南

标题:探索C#的随机森林:内置随机数生成器的深度指南 在编程世界中,随机数生成器是一种常用工具,它在模拟、游戏开发、加密、科学计算等领域发挥着重要作用。C#提供了强大的内置随机数生成器,使得生成随机数变得简单而…

现有electron-quick-start把vue项目打包后的dist打包exe自定义最小化点击事件

1.preload.js里暴露接口 const { contextBridge, ipcRenderer } require(electron) contextBridge.exposeInMainWorld(electronAPI, {WindowMin: (data) > {ipcRenderer.send(window-min, data);} });2.vue文件处理 if(window.electronAPI){window.electronAPI.WindowMi…

Hive SQL语言

目录 Hive SQL之数据库与建库 create database :创建数据库 use database :选择特定的数据库 drop database :删除数据库 Hive SQL之表与建表 create table : 创建表 分隔符指定语法 Hive SQL-DML-Load加载数据 Load语法功能 语法规则之filepath 语法规则之LOCAL …

IPython 使用技巧整理

IPython 是一个增强版的 Python 交互式解释器,它提供了许多有用的功能,比如自动补全、代码历史、多行编辑、魔术命令等。 1. 自动补全功能 IPython 的自动补全功能可以大大提高编码效率。当你在编写代码时,只需按下 Tab 键,IPyt…

【逐行注释】基于CV/CT模型的IMM|MATLAB程序|源代码复制后即可运行,无需下载

订阅专栏后可以直接查看完整的源代码(和注释),无需付费下载或其他的操作。代码复制到MATLAB上面可以得到和我一样的运行结果。 文章目录 程序概述完整代码与逐行注释运行结果解释按模块分析代码程序概述 基于EKF的多模型交互。以CV和CT两个模型进行交互,这里对代码进行逐…