用魔搭账号登录你的应用:ModelScope OAuth 统一身份接入指南
让你的应用接入魔搭社区 2000万+开发者生态。
1、为什么需要统一账号登录?
你是否遇到过这些场景:
-
在魔搭创空间部署了一个 Web 应用,希望直接复用魔搭的用户体系
-
想知道"谁在用我的应用",但缺乏身份识别能力
-
用户反馈"又要记一套密码",注册转化率低
现在,魔搭社区已正式开放 OAuth 2.0 / OIDC 统一身份认证能力。你的应用只需接入几行代码,用户就能通过魔搭账号一键登录 — 无需额外注册,即来即用。
2、它能做什么?
魔搭 OAuth 基于标准的 OAuth 2.0 协议和 OIDC(OpenID Connect)身份认证协议,支持:
|
能力 |
说明 |
|
一键登录 |
用户点击"用魔搭账号登录",跳转魔搭授权页,授权后自动回到你的应用 |
|
获取用户信息 |
获取用户名、昵称、头像等公开信息(scope: |
|
代理操作 |
经用户授权,可代表用户读取私有仓库、管理MCP 服务,其余服务正在陆续公开中 |
|
权限可控 |
用户随时可在魔搭的访问控制页面撤回授权 |
完整的授权范围(scope)列表和 OpenAPI 文档见:魔搭 OAuth 接入文档
3、最快接入方式:让 AI 帮你写
如果你使用 Cursor 等支持 Agent Skill 的 AI 编程工具,最快的接入方式是让 AI 直接帮你完成。我们准备了两个开箱即用的 Skill:
Skill 1:ModelScope OAuth 接入
Skill 地址:
https://modelscope.cn/skills/@ModelScope/modelscope-oauth-skill
安装这个 Skill 后,你只需要告诉 AI:
"给我的应用接入魔搭账号登录"
AI 就会按照最佳实践,自动完成后端接口和前端页面的编写,包括:
-
OAuth 授权 URL 生成
-
回调处理与 Token 交换
-
用户信息获取与入库
-
创空间反向代理的适配
Skill 2:魔搭创空间部署
Skill 地址:
https://modelscope.cn/skills/@hicicada/modelscope-studio-deploy
帮助你将应用打包并部署到魔搭创空间,包括 Dockerfile 编写、持久化存储配置、端口设置等。
两个 Skill 配合使用,从开发到部署到接入登录,AI Agent 可以端到端完成。
4、演示案例
demo:
我们以一个创空间部署为例,完整演示如何接入魔搭 OAuth。
体验地址:https://modelscope.cn/studios/modelscope/modelscope-oauth-demo
用户打开应用后,只需点击"使用 ModelScope 账号登录",即完成 OAuth 授权和测试各类授权后接口。
真实案例:
我们以一个真实项目 — "魔搭共建者共创平台" 为例,也同步邀请魔搭的共建者来真实提交相关议题和痛点。
体验地址:
https://www.modelscope.cn/studios/MSEO/ModelScopeBuilders(体验密码:2022)
如果你想了解背后的原理,或者需要手动接入,请继续阅读。
5、手动接入:4 步详解
第一步:注册 OAuth 互联应用
-
登录 魔搭社区,进入 首页 → 访问控制 → 互联应用
-
创建新应用,填写名称和回调地址
-
获取 Client ID 和 Client Secret
重要:回调地址(Redirect URI)应使用创空间的 host 地址(如 https://your-app.ms.show\),而不是 modelscope.cn/studios/... 路径。详见下方"踩坑指南"。
第二步:后端 — 生成授权 URL
当用户点击登录时,后端生成一个跳转到魔搭授权页的 URL:
// Node.js / Express
app.get('/api/auth/oauth/url', (req, res) => {
const redirectUri = req.query.redirect_uri
const state = crypto.randomUUID()
const params = new URLSearchParams({
client_id: process.env.OAUTH_CLIENT_ID,
redirect_uri: redirectUri,
response_type: 'code',
scope: 'openid profile',
state,
})
res.json({
url: `https://www.modelscope.cn/oauth/authorize?${params}`,
state,
})
})
第三步:后端 — 处理回调,获取用户信息
用户在魔搭授权后,会被重定向回你的应用,URL 中携带 code 参数。后端用这个 code 换取 access_token,再用 token 获取用户信息:
app.post('/api/auth/oauth/callback', async (req, res) => {
const { code, redirect_uri } = req.body
// 1. code → access_token
const tokenRes = await fetch('https://www.modelscope.cn/oauth/token', {
method: 'POST',
headers: { 'Content-Type': 'application/x-www-form-urlencoded' },
body: new URLSearchParams({
grant_type: 'authorization_code',
client_id: process.env.OAUTH_CLIENT_ID,
client_secret: process.env.OAUTH_CLIENT_SECRET,
code,
redirect_uri,
}),
})
const { access_token } = await tokenRes.json()
// 2. access_token → 用户信息(二选一)
// 方式 A:OIDC 标准 userinfo 端点(推荐)
const userRes = await fetch('https://www.modelscope.cn/oauth/userinfo', {
headers: { Authorization: `Bearer ${access_token}` },
})
const userInfo = await userRes.json()
// userInfo: { sub, name, preferred_username, picture, email, ... }
// 方式 B:OpenAPI 端点(返回更多魔搭平台字段)
// const userRes = await fetch('https://modelscope.cn/openapi/v1/users/me', {
// headers: { Authorization: `Bearer ${access_token}` },
// })
// const { data } = await userRes.json()
// data: { username, nickname, avatar_url, email, description }
// 3. 在你的数据库中创建或更新用户
// ...
res.json(user)
})
第四步:前端 — 触发登录 & 处理回调
// 发起登录
const handleLogin = async () => {
const redirectUri = window.location.origin // 关键:使用前端真实地址
const { url } = await fetch(
`/api/auth/oauth/url?redirect_uri=${encodeURIComponent(redirectUri)}`
).then(r => r.json())
window.location.href = url // 跳转到魔搭授权页
}
// 页面加载时检测回调
useEffect(() => {
const code = new URLSearchParams(window.location.search).get('code')
if (!code) return
fetch('/api/auth/oauth/callback', {
method: 'POST',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify({
code,
redirect_uri: window.location.origin,
}),
})
.then(r => r.json())
.then(user => {
// 登录成功,存储用户信息
window.history.replaceState({}, '', window.location.pathname)
})
}, [ ])
就这么简单。 四步完成,你的应用就拥有了魔搭社区的统一身份能力。
6、避坑指南:创空间部署的特殊注意
在实际将"共建者共创平台"部署到魔搭创空间的过程中,我们积累了一些有价值的经验:
1. redirect_uri 必须由前端提供
创空间的容器运行在反向代理后面,后端通过 req.headers['host']不是真实 host,需通过 x-forwarded-host 获取,参考 这里;
2. Client Secret 不要写死在代码里
通过创空间的环境变量注入 OAUTH_CLIENT_ID 和 OAUTH_CLIENT_SECRET,不要提交到代码仓库。
3. 回调地址使用 host 域名
创空间应用有两种访问方式:
|
类型 |
示例 |
OAuth 兼容性 |
|
Studio 路径 |
|
❌ 不适用 |
|
host 地址 |
|
✅ 推荐 |
两者的对应关系:Studio 路径中的 owner/name 拼接为 owner-name,即 host 地址为 https://{owner}-{name}.ms.show。例如:
|
Studio 路径 |
host 地址 |
|
|
|
注意:owner 和 name 中的大写字母在 host 地址中会转为小写。
OAuth 重定向 URL 必须使用 host 地址,因为 Studio 路径是通过 modelscope.cn 的 iframe 嵌入的,window.location.origin 返回的是 https://modelscope.cn\ 而非应用自身地址,无法用于 OAuth 回调。
7、更多授权能力
除了基础的用户身份信息,魔搭 OAuth 还支持更丰富的授权范围:
|
scope |
能力 |
典型场景 |
|
|
获取 id_token 和 access_token |
基础身份认证 |
|
|
获取用户名、昵称、头像等 |
用户展示 |
|
|
读取用户的模型和数据集 |
资产管理工具 |
|
|
管理用户的 MCP 服务部署 |
MCP 管理平台 |
|
|
获取用户已部署的 MCP 服务 |
MCP 仪表盘 |
更多 scope 持续开放中。
8、总结
|
维度 |
说明 |
|
接入成本 |
Skill 模式:一句话搞定;手动模式:前后端各 20 行代码 |
|
协议标准 |
OAuth 2.0 + OIDC,行业通用 |
|
用户体验 |
一键授权,无需注册 |
|
安全机制 |
授权码模式 + 可随时撤回 |
|
扩展性 |
丰富的 scope,持续开放更多 API |
如果你正在魔搭创空间上构建应用,不妨试试接入魔搭 OAuth — 让你的用户少记一个密码,让你的应用融入千万开发者生态。
相关链接:
更多推荐




所有评论(0)