Logto 是一个为现代应用和 SaaS 产品设计的 Auth0 替代方案。它提供 Cloud 和 开源 服务,帮助你快速启动身份和管理 (IAM) 系统。享受认证 (Authentication)、授权 (Authorization) 和多租户管理 一体化。
我们建议从 Logto Cloud 上的免费开发租户开始。这可以让你轻松探索所有功能。
在本文中,我们将介绍使用 Python 和 Logto 快速构建 Google Workspace enterprise SSO 登录体验(用户认证 (Authentication))的步骤。
先决条件
Create an application in Logto
Logto 基于 OpenID Connect (OIDC) 认证 (Authentication) 和 OAuth 2.0 授权 (Authorization)。它支持跨多个应用程序的联合身份管理,通常称为单点登录 (SSO)。
要创建你的 Traditional web 应用程序,只需按照以下步骤操作:
- 打开 Logto Console。在“开始使用”部分,点击“查看全部”链接以打开应用程序框架列表。或者,你可以导航到 Logto Console > Applications,然后点击“创建应用程序”按钮。
- 在打开的模态窗口中,点击“Traditional web”部分,或使用左侧的快速过滤复选框过滤所有可用的“Traditional web”框架。点击 "Flask" 框架卡片以开始创建你的应用程序。
- 输入应用程序名称,例如“Bookstore”,然后点击“创建应用程序”。
🎉 太棒了!你刚刚在 Logto 中创建了你的第一个应用程序。你将看到一个祝贺页面,其中包含详细的集成指南。按照指南查看你的应用程序中的体验将会是什么样的。
Integrate Flask SDK
- 示例使用 Flask,但概念对于其他框架是相同的。
- Python 示例项目可在我们的 Python SDK 仓库 中找到。
- Logto SDK 利用协程,调用异步函数时请记得使用
await
。
安装
在项目根目录执行:
pip install logto # 或者 `poetry add logto` 或者你使用的其他工具
初始化 LogtoClient
首先,创建一个 Logto 配置:
from logto import LogtoClient, LogtoConfig
client = LogtoClient(
LogtoConfig(
endpoint="https://you-logto-endpoint.app", # 用你的 Logto endpoint 替换
appId="replace-with-your-app-id",
appSecret="replace-with-your-app-secret",
),
)
你可以在管理控制台的应用详情页面找到并复制“应用密钥”:
还可以将默认的内存存储替换为持久存储,例如:
from logto import LogtoClient, LogtoConfig, Storage
from flask import session
from typing import Union
class SessionStorage(Storage):
def get(self, key: str) -> Union[str, None]:
return session.get(key, None)
def set(self, key: str, value: Union[str, None]) -> None:
session[key] = value
def delete(self, key: str) -> None:
session.pop(key, None)
client = LogtoClient(
LogtoConfig(...),
storage=SessionStorage(),
)
查看 Storage 了解更多详情。
实现登录和登出
在你的 Web 应用中,添加一个路由来正确处理用户的登录请求。我们以 /sign-in
为例:
@app.route("/sign-in")
async def sign_in():
# 获取登录 URL 并重定向用户到该 URL
return redirect(await client.signIn(
redirectUri="http://localhost:3000/callback",
))
将 http://localhost:3000/callback
替换为你在 Logto Console 中为此应用设置的回调 URL。
如果你想在第一个屏幕显示注册页面,可以将 interactionMode
设置为 signUp
:
@app.route("/sign-in")
async def sign_in():
return redirect(await client.signIn(
redirectUri="http://localhost:3000/callback",
interactionMode="signUp", # 在第一个屏幕显示注册页面
))
现在,每当你的用户访问 http://localhost:3000/sign-in
时,就会启动一个新的登录尝试,并将用户重定向到 Logto 登录页面。
注意 创建一个登录路由并不是启动登录尝试的唯一方法。你可以随时使用
signIn
方法获取登录 URL 并将用户重定向到该 URL。
在用户发出注销请求后,Logto 将清除会话中的所有用户认证 (Authentication) 信息。
要清理 Python 会话和 Logto 会话,可以实现一个注销路由,如下所示:
@app.route("/sign-out")
async def sign_out():
return redirect(
# 在成功注销后将用户重定向到主页
await client.signOut(postLogoutRedirectUri="http://localhost:3000/")
)
处理认证 (Authentication) 状态
在 Logto SDK 中,我们可以使用 client.isAuthenticated()
来检查认证 (Authentication) 状态,如果用户已登录,值将为 true,否则,值将为 false。
这里我们还实现了一个简单的主页用于演示:
- 如果用户未登录,显示一个登录按钮;
- 如果用户已登录,显示一个登出按钮。
@app.route("/")
async def home():
if client.isAuthenticated() is False:
return "未认证 <a href='/sign-in'>登录</a>"
return "已认证 <a href='/sign-out'>登出</a>"
检查点:测试你的应用程序
现在,你可以测试你的应用程序:
- 运行你的应用程序,你将看到登录按钮。
- 点击登录按钮,SDK 将初始化登录过程并将你重定向到 Logto 登录页面。
- 登录后,你将被重定向回你的应用程序,并看到登出按钮。
- 点击登出按钮以清除令牌存储并登出。
Add Google Workspace enterprise SSO connector
To simplify access management and gain enterprise-level safeguards for your big clients, connect with Flask as a federated identity provider. The Logto enterprise SSO connector helps you establish this connection in minutes by allowing several parameter inputs.
To add an enterprise SSO connector, simply follow these steps:
- Navigate to Logto console > Enterprise SSO.
- Click "Add enterprise connector" button and choose your SSO provider type. Choose from prebuilt connectors for Microsoft Entra ID (Azure AD), Google Workspace, and Okta, or create a custom SSO connection using the standard OpenID Connect (OIDC) or SAML protocol.
- Provide a unique name (e.g., SSO sign-in for Acme Company).
- Configure the connection with your IdP in the "Connection" tab. Check the guides above for each connector types.
- Customize the SSO experience and enterprise’s email domain in the "Experience" tab. Users sign in with the SSO-enabled email domain will be redirected to SSO authentication.
- Save changes.
Set up Google Cloud Platform
步骤 1:在 Google Cloud Platform 上创建一个新项目
在你可以使用 Google Workspace 作为认证 (Authentication) 提供商之前,你必须在 Google API Console 中设置一个项目以获取 OAuth 2.0 凭证。如果你已经有一个项目,可以跳过这一步。否则,请在你的 Google 组织下创建一个新项目。
步骤 2:为你的应用程序配置用户授权页面
为了创建新的 OIDC 凭证,你需要为你的应用程序配置用户授权页面 (Consent screen)。
- 导航到 OAuth 用户授权页面 (Consent screen) 页面并选择
Internal
用户类型。这将使 OAuth 应用程序仅对你的组织内的用户可用。
- 按照页面上的说明填写
用户授权页面 (Consent Screen)
设置。你需要提供以下最少信息:
- 应用程序名称:你的应用程序的名称。它将在用户授权页面上显示。
- 支持邮箱:你的应用程序的支持邮箱。它将在用户授权页面上显示。
- 为你的应用程序设置
权限 (Scopes)
。为了正确从身份提供商 (IdP) 检索用户的身份信息和电子邮件地址,Logto SSO 连接器需要从 IdP 授予以下权限 (Scopes):
- openid:此权限是 OIDC 认证 (Authentication) 所需的。它用于检索 ID 令牌 (ID token) 并访问 IdP 的 userInfo 端点。
- profile:此权限用于访问用户的基本个人信息。
- email:此权限用于访问用户的电子邮件地址。
点击 Save
按钮以保存用户授权页面设置。
步骤 3:创建一个新的 OAuth 凭证
导航到 Credentials 页面并点击 Create Credentials
按钮。从下拉菜单中选择 OAuth client ID
选项,为你的应用程序创建一个新的 OAuth 凭证。
继续设置 OAuth 凭证,填写以下信息:
- 选择
Web application
作为应用程序类型。 - 填写你的客户端应用程序的
Name
,例如Logto SSO Connector
。这将帮助你在未来识别这些凭证。 - 在
Authorized redirect URIs
中填写 Logto 回调 URI。这是 Google 在成功认证 (Authentication) 后将用户的浏览器重定向到的 URI。当用户成功通过 IdP 认证 (Authentication) 后,IdP 会将用户的浏览器重定向回这个指定的 URI,并附带一个授权 (Authorization) 代码。Logto 将根据从此 URI 接收到的授权 (Authorization) 代码完成认证 (Authentication) 过程。 - 在
Authorized JavaScript origins
中填写 Logto 回调 URI 的来源。这确保只有你的 Logto 应用程序可以向 Google OAuth 服务器发送请求。 - 点击
Create
按钮以创建 OAuth 凭证。
步骤 4:使用客户端凭证设置 Logto 连接器
成功创建 OAuth 凭证后,你将收到一个包含客户端 ID 和客户端密钥的提示模式窗口。
复制 Client ID
和 Client secret
,并填写到 Logto 的 SSO 连接器 Connection
选项卡中的相应字段。
现在你已经在 Logto 上成功配置了一个 Google Workspace SSO 连接器。
步骤 5:附加权限 (Scopes)(可选)
使用 Scope
字段向你的 OAuth 请求添加额外的权限 (Scopes)。这将允许你从 Google OAuth 服务器请求更多信息。请参考 Google OAuth Scopes 文档以获取更多信息。
无论自定义权限 (Scope) 设置如何,Logto 总是会向身份提供商 (IdP) 发送 openid
、profile
和 email
权限 (Scopes)。这是为了确保 Logto 能够正确检索用户的身份信息和电子邮件地址。
步骤 6:设置电子邮件域并启用 SSO 连接器
在 Logto 的连接器 SSO 体验
标签中提供你组织的 电子邮件域
。这将启用 SSO 连接器作为这些用户的认证 (Authentication) 方法。
具有指定域的电子邮件地址的用户将被重定向,以使用你的 SSO 连接器作为他们唯一的认证 (Authentication) 方法。
有关 Google Workspace SSO 连接器的更多信息,请查看 Google OpenID Connector。
Save your configuration
仔细检查你是否在 Logto 连接器配置区域填写了必要的值。点击“保存并完成”(或“保存更改”),Google Workspace enterprise SSO 连接器现在应该可用了。
Enable Google Workspace enterprise SSO connector in Sign-in Experience
You don’t need to configure enterprise connectors individually, Logto simplifies SSO integration into your applications with just one click.
- Navigate to: Console > Sign-in experience > Sign-up and sign-in.
- Enable the "Enterprise SSO" toggle.
- Save changes.
Once enabled, a "Single Sign-On" button will appear on your sign-in page. Enterprise users with SSO-enabled email domains can access your services using their enterprise identity providers (IdPs).
To learn more about the SSO user experience, including SP-initiated SSO and IdP-initiated SSO, refer to User flows: Enterprise SSO.
Testing and Validation
返回到你的 Python 应用。你现在应该可以使用 Google Workspace enterprise SSO 登录了。享受吧!
Further readings
终端用户流程:Logto 提供开箱即用的认证 (Authentication) 流程,包括多因素认证 (MFA) 和企业单点登录 (SSO),以及强大的 API,用于灵活实现账户设置、安全验证和多租户体验。
授权 (Authorization):授权 (Authorization) 定义了用户在被认证 (Authentication) 后可以执行的操作或访问的资源。探索如何保护你的 API 以用于原生和单页应用程序,并实现基于角色的访问控制 (RBAC)。
组织 (Organizations):在多租户 SaaS 和 B2B 应用中特别有效,组织功能支持租户创建、成员管理、组织级 RBAC 和即时供应。
客户 IAM 系列:我们关于客户(或消费者)身份和访问管理的系列博客文章,从 101 到高级主题及更深入的内容。