能否通过用户名密码获取Microsoft Teams Bearer Token并实现账户管理?
问题解答
可行性判断
能做到,但属于非官方操作,违反微软服务条款,大概率会触发账号风控,轻则令牌失效,重则账号被封禁,只适合临时测试,绝对不能用于生产环境。
两种令牌的区别
- 浏览器里看到的Bearer令牌:是Microsoft Graph API的官方授权凭证,所有团队管理相关的API(创建团队、频道、添加成员)都靠它调用,是你需要重点获取的对象。
- Skypetoken:是Teams客户端内部用来处理聊天、通话的专用令牌,和Graph API完全不兼容,对你要做的团队管理没用。
Python实现步骤
核心就是模拟你在浏览器里登录Teams的全过程,抓出Bearer令牌,再用令牌调用API:
1. 模拟登录获取令牌
- 用
requests库维持会话,先访问Teams的登录页面,抓取页面里的csrf令牌、会话ID等必要参数(需自己解析HTML或cookie)。 - 把用户名密码打包成表单,POST到微软的登录接口,跟踪跳转流程,最后在访问Graph API(比如
https://graph.microsoft.com/v1.0/me)的请求头里就能提取到Bearer令牌。 - 注意:如果你的账号开启了MFA(多因素认证),这种方法直接失效,无法绕过。
2. 用令牌调用团队管理API
拿到令牌后,直接发送HTTP请求调用Graph API即可:
- 创建团队:POST请求到
https://graph.microsoft.com/v1.0/teams,请求体填写团队名称、模板等信息。 - 创建频道:POST请求到
https://graph.microsoft.com/v1.0/teams/{团队ID}/channels。 - 邀请成员:POST请求到
https://graph.microsoft.com/v1.0/teams/{团队ID}/members/$ref,指定成员的邮箱或用户ID。
核心代码片段(需根据实际登录流程补充参数):
import requests # 维持会话,保存登录状态cookie session = requests.Session() # 1. 访问登录初始化页面,获取会话参数 login_init_url = "https://login.microsoftonline.com/common/oauth2/v2.0/authorize?client_id=1fec8e78-bce4-4aaf-ab1b-5451cc387264&response_type=code&redirect_uri=https%3A%2F%2Fteams.microsoft.com%2Fgo&response_mode=query&scope=openid%20profile%20email%20offline_access%20https%3A%2F%2Fgraph.microsoft.com%2FUser.Read%20https%3A%2F%2Fgraph.microsoft.com%2FGroup.ReadWrite.All&state=teamsRedirect&nonce=12345" session.get(login_init_url) # 2. 提交用户名密码(需补充登录页面抓取的csrf_token、ctx等参数) login_post_data = { "login": "你的租户用户名", "passwd": "你的密码", # 此处需添加从登录页面解析出的csrf、ctx等必填参数 } session.post("https://login.microsoftonline.com/common/login", data=login_post_data) # 3. 触发令牌生成,从请求头提取Bearer令牌 me_response = session.get("https://graph.microsoft.com/v1.0/me") bearer_token = me_response.request.headers["Authorization"].split(" ")[1] # 4. 调用API创建团队 create_team_headers = { "Authorization": f"Bearer {bearer_token}", "Content-Type": "application/json" } create_team_body = { "displayName": "测试团队", "description": "脚本创建的测试团队", "template@odata.bind": "https://graph.microsoft.com/v1.0/teamsTemplates('standard')" } team_response = session.post("https://graph.microsoft.com/v1.0/teams", json=create_team_body, headers=create_team_headers) print(team_response.json())
必须注意的风险与限制
- 账号封禁风险:微软反爬与风控机制严格,自动化登录极易被检测到,账号可能被限制或永久封禁。
- 令牌有效期短:Bearer令牌通常仅1小时有效,需模拟刷新流程才能持续使用。
- 权限要求:你的账号必须拥有创建团队、邀请成员的对应权限(如Teams管理员角色),否则即使拿到令牌,API调用也会返回权限不足错误。
- MFA无法绕过:若账号开启多因素认证,模拟密码登录的方法完全失效。
内容的提问来源于stack exchange,提问作者pippo
相关产品推荐
相关产品推荐

