🚀 Okta MCP服务器
Okta MCP服务器集成了大语言模型(LLM)和AI智能体,允许你使用自然语言执行各种Okta管理操作,为你的LLM智能体赋能,实现对Okta组织的管理。
✨ 主要特性
- 由大语言模型驱动的Okta管理:允许你的LLM智能体根据自然语言指令在Okta环境中执行管理任务。
- 安全认证:支持用于交互式使用的设备授权授予和用于安全、自动化的服务器到服务器通信的私钥JWT。
- 与Okta管理API集成:利用官方Okta API,确保与你的Okta组织进行安全可靠的交互。
- 可扩展架构:设计为易于扩展新功能,并支持更多的Okta API端点。
- 全面的工具支持:支持对用户、组、应用程序、策略等进行完整的CRUD操作。
🚀 快速开始
前提条件
安装Okta MCP服务器
安装Okta MCP服务器,并将其配置为与你首选的MCP客户端配合使用。
Claude Desktop(包含所有工具)
- 克隆并安装服务器:
git clone https://github.com/okta/okta-mcp-server.git
cd okta-mcp-server
uv sync
- 通过在
claude_desktop_config.json 中添加以下内容来配置Claude Desktop:
{
"mcpServers": {
"okta-mcp-server": {
"command": "uv",
"args": [
"run",
"--directory",
"/path/to/okta-mcp-server",
"okta-mcp-server"
],
"env": {
"OKTA_ORG_URL": "<OKTA_ORG_URL>",
"OKTA_CLIENT_ID": "<OKTA_CLIENT_ID>",
"OKTA_SCOPES": "<OKTA_SCOPES>",
"OKTA_PRIVATE_KEY": "<PRIVATE_KEY_IF_NEEDED>",
"OKTA_KEY_ID": "<KEY_ID_IF_NEEDED>"
}
}
}
}
VS Code
在VS Code的 settings.json 中添加以下内容:
{
"mcp": {
"inputs": [
{
"type": "promptString",
"description": "Okta组织URL(例如,https://dev-123456.okta.com)",
"id": "OKTA_ORG_URL"
},
{
"type": "promptString",
"description": "Okta客户端ID",
"id": "OKTA_CLIENT_ID",
"password": true
},
{
"type": "promptString",
"description": "Okta作用域(用空格分隔,例如 'okta.users.read okta.groups.manage')",
"id": "OKTA_SCOPES"
},
{
"type": "promptString",
"description": "Okta私钥。'无浏览器'认证需要。",
"id": "OKTA_PRIVATE_KEY",
"password": true
},
{
"type": "promptString",
"description": "用于私钥的Okta密钥ID(KID)。'无浏览器'认证需要。",
"id": "OKTA_KEY_ID",
"password": true
}
],
"servers": {
"okta-mcp-server": {
"command": "uv",
"args": [
"run",
"--directory",
"/path/to/the/okta-mcp-server",
"okta-mcp-server"
],
"env": {
"OKTA_ORG_URL": "${input:OKTA_ORG_URL}",
"OKTA_CLIENT_ID": "${input:OKTA_CLIENT_ID}",
"OKTA_SCOPES": "${input:OKTA_SCOPES}",
"OKTA_PRIVATE_KEY": "${input:OKTA_PRIVATE_KEY}",
"OKTA_KEY_ID": "${input:OKTA_KEY_ID}"
}
}
}
}
}
其他MCP客户端
要将Okta MCP服务器与其他MCP客户端一起使用,你可以手动将此配置添加到客户端,并重新启动以使更改生效:
{
"mcpServers": {
"okta-mcp-server": {
"command": "uv",
"args": [
"run",
"--directory",
"/path/to/okta-mcp-server",
"okta-mcp-server"
],
"env": {
"OKTA_ORG_URL": "<OKTA_ORG_URL>",
"OKTA_CLIENT_ID": "<OKTA_CLIENT_ID>",
"OKTA_SCOPES": "<OKTA_SCOPES>",
"OKTA_PRIVATE_KEY": "<PRIVATE_KEY_IF_NEEDED>",
"OKTA_KEY_ID": "<KEY_ID_IF_NEEDED>"
}
}
}
}
与Okta进行身份验证
服务器支持两种身份验证方法。选择最适合你用例的方法。
方法1:设备授权授予(交互式)
- 在你的Okta组织中,创建一个 新的应用集成。
- 选择 OIDC - OpenID Connect 和 原生应用程序。
- 在 授权类型 下,确保选中 设备授权。
- 转到Okta API作用域选项卡,并授予你需要的API权限(例如,okta.users.read、okta.groups.manage)。
- 保存应用程序并复制 客户端ID。
- 文档:Okta设备授权授予指南
方法2:私钥JWT(无浏览器)
- 创建应用:在你的Okta组织中,创建一个 新的应用集成。选择 API服务。保存应用并复制 客户端ID。
- 配置客户端认证:
- 在应用的 常规 选项卡上,找到 客户端凭证 部分并点击 编辑。
- 禁用 在令牌请求中要求证明拥有权(DPoP)标头。
- 选择 公钥/私钥 作为认证方法。
- 添加公钥:你有两种添加密钥的选项。
- 选项A:在Okta中生成密钥(推荐)
- 在 公钥 部分,点击 添加密钥。
- 在对话框中,选择 生成新密钥。
- Okta将立即生成一个密钥对。下载或保存私钥 (
private.pem) 并安全存储。
- 复制新生成密钥显示的 密钥ID(KID)。
- 选项B:使用你自己的密钥
- 使用以下
openssl 命令在本地生成一个密钥对:
openssl genpkey -algorithm RSA -out private.pem -pkeyopt rsa_keygen_bits:2048
openssl rsa -in private.pem -pubout -out public.pem
2. 点击 **添加密钥** 并将你的 **公钥** (`public.pem`) 内容粘贴到对话框中。
3. 复制你添加的密钥显示的 **密钥ID(KID)**。
- 授予API作用域:转到 Okta API作用域 选项卡并 授予 你需要的API权限。
- 分配管理员角色:为避免
403 Forbidden 错误,转到 管理员角色 选项卡并将 超级管理员 角色分配给此应用程序。
验证集成
重新启动你的MCP客户端(Claude Desktop、VS Code等),并让它帮助你管理你的Okta租户:
显示我Okta组织中的用户
📦 支持的工具
Okta MCP服务器提供以下工具,供大语言模型与你的Okta租户进行交互:
用户
| 工具 |
描述 |
使用示例 |
list_users |
列出你Okta组织中的所有用户 |
- 显示我Okta组织中的用户 - 查找姓名中包含 'john' 的用户 - 我在工程部门有哪些用户? |
get_user |
获取特定用户的详细信息 |
- 显示用户john.doe@company.com的详细信息 - 获取用户ID为00u1234567890的信息 - Jane Smith是哪些组的成员? |
create_user |
在你的Okta组织中创建一个新用户 |
- 创建一个名为John Doe的新用户,邮箱为john.doe@company.com - 向销售部门添加一名新员工 - 设置一个承包商账户 |
update_user |
更新现有用户的个人资料信息 |
- 将John Doe的部门更新为工程部门 - 更改用户jane.smith@company.com的电话号码 - 更新此用户的经理 |
deactivate_user |
停用用户,使其处于非活动状态 |
- 停用用户john.doe@company.com - 禁用前员工Jane Smith的访问权限 - 暂时暂停承包商账户 |
delete_deactivated_user |
永久删除已停用的用户 |
- 删除已停用的用户john.doe@company.com - 永久删除前员工Jane Smith - 清理旧的承包商账户 |
get_user_profile_attributes |
检索所有支持的用户个人资料属性 |
- 有哪些可用的用户个人资料字段? - 显示我们可以设置的所有自定义属性 - 列出标准的Okta用户属性 |
组
| 工具 |
描述 |
使用示例 |
list_groups |
列出你Okta组织中的所有组 |
- 显示我Okta组织中的组 - 查找名称中包含 'Engineering' 的组 - 我们有哪些安全组? |
get_group |
获取特定组的详细信息 |
- 显示工程组的详细信息 - 管理员组有多少成员? - 销售部门分配了哪些应用程序? |
create_group |
创建一个新组 |
- 创建一个名为DevOps Team的新组 - 为财务部门设置一个安全组 - 为临时承包商添加一个组 |
update_group |
更新现有组的信息 |
- 更新工程组的描述 - 将销售组的名称更改为收入团队 - 修改财务组的设置 |
delete_group |
删除一个组(需要确认) |
- 删除旧的营销组 - 移除临时项目组 - 清理未使用的安全组 |
list_group_users |
列出属于某个组的所有用户 |
- 工程组的成员有哪些? - 显示所有管理员 - 列出财务部门的用户 |
list_group_apps |
列出分配给某个组的所有应用程序 |
- 工程组可以访问哪些应用程序? - 显示分配给销售团队的应用程序 - 列出管理员的所有应用程序 |
add_user_to_group |
将用户添加到组中 |
- 将john.doe@company.com添加到工程组 - 授予Jane Smith访问财务应用程序的权限 - 将新员工添加到销售团队 |
remove_user_from_group |
将用户从组中移除 |
- 将john.doe@company.com从工程组中移除 - 撤销Jane的管理员权限 - 将承包商从财务组中移除 |
应用程序
| 工具 |
描述 |
使用示例 |
list_applications |
列出你Okta组织中的所有应用程序 |
- 显示我Okta组织中的应用程序 - 查找名称中包含 'API' 的应用程序 - 我们配置了哪些SSO应用程序? |
get_application |
获取特定应用程序的详细信息 |
- 显示Salesforce应用程序的详细信息 - 我们的移动应用程序的回调URL是什么? - 获取我们的Web应用程序的客户端ID |
create_application |
创建一个新的应用程序 |
- 为我们的HR系统创建一个新的SAML应用程序 - 设置一个新的API服务应用程序 - 添加一个移动应用程序集成 |
update_application |
更新现有应用程序 |
- 更新我们的Web应用程序的回调URL - 更改Salesforce应用程序的徽标 - 修改我们的HR系统的SAML设置 |
delete_application |
删除一个应用程序(需要确认) |
- 删除旧的遗留应用程序 - 移除未使用的测试应用程序 - 清理已弃用的集成 |
activate_application |
激活应用程序 |
- 激活新的HR应用程序 - 启用Salesforce集成 - 为用户开启移动应用程序 |
deactivate_application |
停用应用程序 |
- 停用遗留的CRM应用程序 - 暂时禁用移动应用程序 - 关闭对测试环境的访问 |
策略
| 工具 |
描述 |
使用示例 |
list_policies |
列出你Okta组织中的所有策略 |
- 显示安全策略 - 我们有哪些密码策略? - 列出所有MFA注册策略 |
get_policy |
获取策略的详细信息 |
- 显示我们的密码策略的详细信息 - MFA要求是什么? - 显示承包商的登录策略 |
create_policy |
创建一个新的策略 |
- 为承包商创建一个新的密码策略 - 为高风险应用程序设置MFA要求 - 为远程工作者添加一个登录策略 |
update_policy |
更新现有策略 |
- 更新密码复杂度要求 - 修改高管的MFA策略 - 更改承包商的会话超时时间 |
delete_policy |
删除策略 |
- 删除旧的密码策略 - 移除已弃用的MFA策略 - 清理未使用的安全策略 |
activate_policy |
激活策略 |
- 激活新的密码策略 - 启用MFA要求 - 开启承包商的登录策略 |
deactivate_policy |
停用策略 |
- 停用旧的安全策略 - 暂时禁用MFA进行测试 - 关闭严格的密码要求 |
list_policy_rules |
列出特定策略的所有规则 |
- 显示密码策略的所有规则 - 配置了哪些MFA规则? - 列出我们的登录策略中的例外情况 |
get_policy_rule |
获取策略规则的详细信息 |
- 显示承包商MFA规则的详细信息 - VPN访问规则的条件是什么? - 显示紧急访问规则 |
create_policy_rule |
为策略创建一个新规则 |
- 为高管添加一个例外规则 - 创建一个承包商访问规则 - 为IT管理员设置紧急访问规则 |
update_policy_rule |
更新现有策略规则 |
- 更新远程工作者的位置限制 - 修改设备信任要求 - 更改基于风险的认证设置 |
delete_policy_rule |
从策略中删除规则 |
- 删除旧的承包商例外 - 移除已弃用的VPN规则 - 清理未使用的策略例外 |
activate_policy_rule |
激活策略规则 |
- 激活新的紧急访问规则 - 启用承包商限制 - 开启基于位置的访问规则 |
deactivate_policy_rule |
停用策略规则 |
- 停用旧的紧急规则 - 暂时禁用位置限制 - 为测试关闭设备信任要求 |
日志
| 工具 |
描述 |
使用示例 |
get_logs |
从你的Okta组织中检索系统日志 |
- 显示最近的登录尝试 - 查找过去24小时内的失败登录 - 获取用户john.doe@company.com的认证日志 |
🔐 身份验证
Okta MCP服务器使用Okta管理API,需要进行身份验证才能访问你的Okta租户。
身份验证流程
服务器使用OAuth 2.0设备授权流程与Okta进行安全认证,或使用私钥JWT进行无浏览器认证。你的凭证将被安全管理,不会以明文形式暴露。
初始设置
MCP服务器将根据你的配置自动启动适当的身份验证流程:
- 设备授权授予:基于交互式浏览器的认证
- 私钥JWT:使用客户端凭证的无浏览器认证
⚠️ 重要提示
设备授权流程不支持 私有云 租户。私有云用户应使用带有客户端凭证的私钥JWT认证。
⚠️ 重要提示
使用MCP服务器将根据你的订阅计划消耗管理API速率限制。有关更多信息,请参阅 速率限制策略。
🩺 故障排除
当遇到Okta MCP服务器的问题时,可以使用以下几种故障排除选项来帮助诊断和解决问题。
🐞 调试模式
启用调试模式以获取更详细的日志:
export OKTA_LOG_LEVEL=DEBUG
💡 使用建议
调试模式在排查连接或认证问题时特别有用。
🚨 常见问题
- 认证失败
- 确保你在Okta租户中拥有正确的权限。
- 验证你的
OKTA_ORG_URL、OKTA_CLIENT_ID 和 OKTA_SCOPES 是否正确。
- 检查你的应用程序是否已授予必要的API作用域。
- MCP客户端无法连接到服务器
- 安装后重新启动你的MCP客户端。
- 验证配置中的服务器路径是否正确。
- 检查
uv 是否已安装并可在你的PATH中访问。
- API错误或权限问题
- 使用
export OKTA_LOG_LEVEL=DEBUG 启用调试模式。
- 验证你的Okta应用程序是否具有所需的作用域。
- 确保你的应用程序已分配适当的管理员角色。
- 检查Okta系统日志以获取详细的错误信息。
- “Claude的响应被中断...” 错误
- 这通常是因为Claude达到了其上下文长度限制。
- 尝试更具体并保持查询简洁。
- 将大型请求拆分为更小、更有针对性的操作。
💡 使用建议
大多数连接问题可以通过重新启动服务器和MCP客户端来解决。
📋 调试日志
启用调试模式以查看详细日志:
export OKTA_LOG_LEVEL=DEBUG
你还可以指定日志文件:
export OKTA_LOG_FILE="/path/to/okta-mcp.log"
👨💻 开发
从源代码构建
git clone https://github.com/okta/okta-mcp-server.git
cd okta-mcp-server
uv sync
uv run okta-mcp-server
开发脚本
OKTA_LOG_LEVEL=DEBUG uv run okta-mcp-server
uv run pytest
uv pip install -e .
⚠️ 重要提示
此服务器需要 Python 3.8或更高版本 和 uv。
🔒 安全
Okta MCP服务器非常重视安全:
- 通过安全的认证流程管理凭证。
- 不将敏感信息以明文形式存储。
- 使用OAuth 2.0设备授权流程或私钥JWT进行认证。
- 支持细粒度的API作用域权限。
- 通过环境变量轻松管理凭证。
⚠️ 重要提示
为了遵循安全最佳实践,请始终在认证过程中审查请求的权限,以确保它们符合你的安全要求。
⚠️ 重要提示
在为你的Okta应用程序授予API作用域时,请始终遵循最小权限原则。
🧪 安全扫描
我们建议定期使用社区工具对该服务器以及你部署的任何其他MCP兼容服务器进行扫描,以发现协议级别的风险和配置错误。
这些扫描器有助于识别关键漏洞类别中的问题,包括:服务器实现错误、工具定义和生命周期风险、交互和数据流弱点以及配置或环境差距。
如果你发现了漏洞,请遵循我们的 负责任披露流程。
💬 反馈和贡献
我们感谢你对这个项目的反馈和贡献!在开始之前,请查看:
报告问题
要提供反馈或报告错误,请 在我们的问题跟踪器上提出问题。
漏洞报告
请不要在公共GitHub问题跟踪器上报告安全漏洞。请遵循 负责任披露流程。
📄 许可证
本项目采用Apache 2.0许可证。有关更多信息,请参阅 LICENSE 文件。
什么是Okta?
Okta是领先的独立身份验证提供商。要了解更多信息,请查看 为什么选择Okta?
Copyright © 2025-Present, Okta, Inc.
根据Apache许可证,版本2.0(“许可证”)许可;除非符合许可证的规定,否则不得使用此文件。你可以在http://www.apache.org/licenses/LICENSE-2.0获得许可证的副本。除非适用法律要求或书面同意,否则根据许可证分发的软件按“原样”分发,不附带任何形式的明示或暗示保证。请参阅许可证以了解管理权限和限制的具体语言。