如何在Postman中使用用户名密码而非客户端ID密钥连接SharePoint?
问题解答
1. 账号是否需要授权?
使用用户名密码(ROPC资源所有者密码凭证流程)连接SharePoint时,你的账号不需要像应用主体那样在appprincipals.aspx里配置授权——这是用户身份直接认证,而非应用身份认证:
- 你在
user.aspx中给账号设置的「完全控制」权限已经满足SharePoint的访问权限要求,这部分操作是正确的。 appprincipals.aspx页面仅显示应用程序主体(即你之前熟悉的客户端ID对应的应用),用户账号不属于应用主体范畴,所以找不到是正常现象,无需纠结。
2. 为什么返回「unsupported_grant_type」错误?
你的请求存在几个关键问题,导致授权服务器不支持该授权类型:
(1)缺少客户端ID和客户端密钥
ROPC流程本质仍需通过已注册的Azure AD应用发起请求,你的请求体里缺失client_id和client_secret参数,必须补充这两个值(即你之前了解的客户端ID与密钥)。
(2)使用了旧版授权端点
你调用的accounts.accesscontrol.windows.net是旧的ACS端点,对ROPC流程支持有限,建议改用Azure AD v2.0标准端点:POST https://login.microsoftonline.com/{tenant_id}/oauth2/v2.0/token
(3)应用未启用ROPC流程
需在Azure AD后台找到对应应用注册,开启「资源所有者密码凭证」授权流:
进入Azure AD应用注册 → 目标应用 → 「认证」 → 「高级设置」 → 「允许的授权类型」,勾选「资源所有者密码凭证」。
(4)账号不能启用多因素认证(MFA)
ROPC流程不支持开启了MFA的账号,若你的账号启用了MFA,必须关闭或改用其他认证方式。
3. 修正后的请求示例
调整后的Postman请求如下:
POST https://login.microsoftonline.com/{tenant_id}/oauth2/v2.0/token Headers: Content-Type: application/x-www-form-urlencoded Body (x-www-form-urlencoded): grant_type: password client_id: 你的客户端ID client_secret: 你的客户端密钥 username: username@company.com password: 你的账号密码 scope: https://{tenant}.sharepoint.com/.default
注:v2.0端点使用
scope参数替代旧的resource,值为SharePoint资源标识符加上.default。
额外注意事项
- ROPC属于安全性较低的认证方式,微软不推荐在生产环境使用,仅建议在无法采用授权码流等更安全流程的场景下临时使用。
- 若你的账号是纯云账号(非本地AD同步账号),需确保账号未被其他安全策略限制密码登录。
内容的提问来源于stack exchange,提问作者code_adithya
相关产品推荐
相关产品推荐

