MS GRAPH API - 创建订阅 - 403 错误 - 调用方无权访问资源
MS GRAPH API - CREATE SUBSCRIPTIONS - 403 ERROR - Caller does not have access to resource
背景:
您好,我正在尝试将 ms 图 API 与 ROPC 身份验证结合使用(其他身份验证方法无效,因为我需要非交互式登录才能获得委派权限)以方便发送回频道消息和来自特定 Teams 频道和我的聊天应用程序。此过程正在处理 loading/sending 消息,但要获得实时更新,看起来我需要能够订阅资源(传出的 webhooks 需要提及,这不是我想要的,尽管我可以设置它并且有效)。
问题:
要订阅资源(ms teams 频道),我使用以下代码:
const token = VALID_TOKEN_HERE // from ROPC auth flow
const url = `https://graph.microsoft.com/beta/subscriptions`
const subscription = {
changeType: 'created,updated',
notificationUrl: `${MY_ENDPOINT}/api/teams/events`,
resource: `teams/${MY_TENANT_ID}/channels/${MY_CHANNEL_ID}/messages`,
expirationDateTime: moment().add(1, 'hours'),
includeResourceData: false,
}
const config = {
headers: {
Authorization: `Bearer ${token}`
}
}
const response = await axios.post(url, subscription, config).catch(e => console.log(e) )
发布到此 url 后,我从 Teams 取回验证令牌请求到我的 notificationUrl 路由,其设置如下:
router.post('/teams/events', async (req, res) => {
if (req.query.validationToken) {
res.set('Content-Type', 'text/plain');
return res.status(200).send(req.query.validationToken);
}
// code that does things with notification below
错误:
但是,最初创建订阅的请求失败了,我得到以下信息:
'Operation: Create;Exception: [Status Code: Forbidden;Reason: Caller does not have access to '/teams('TEAM_ID_HERE')/channels('CHANNEL_ID_HERE')/消息资源]'
其他信息:
这是一个标准(非私人)频道,我的用户是会员
我在获取授权令牌时请求这些权限 'ChannelMessage.Read.All Group.ReadWrite.All Directory.ReadWrite.All ChannelMessage.Send user.read openid profile offline_access'
My API permissions look like this
我缺少什么才能创建订阅?
在尝试使其在 Microsoft Graph Explorer 上运行后,我意识到我尝试访问的资源 url 路径的 ID 错误。
团队/${MY_TENANT_ID}/频道/${MY_CHANNEL_ID}/消息
应该是
团队/${MY_GROUP_ID}/频道/${MY_CHANNEL_ID}/消息
这是错误的来源,更改 ID 修复了它。
背景:
您好,我正在尝试将 ms 图 API 与 ROPC 身份验证结合使用(其他身份验证方法无效,因为我需要非交互式登录才能获得委派权限)以方便发送回频道消息和来自特定 Teams 频道和我的聊天应用程序。此过程正在处理 loading/sending 消息,但要获得实时更新,看起来我需要能够订阅资源(传出的 webhooks 需要提及,这不是我想要的,尽管我可以设置它并且有效)。
问题:
要订阅资源(ms teams 频道),我使用以下代码:
const token = VALID_TOKEN_HERE // from ROPC auth flow
const url = `https://graph.microsoft.com/beta/subscriptions`
const subscription = {
changeType: 'created,updated',
notificationUrl: `${MY_ENDPOINT}/api/teams/events`,
resource: `teams/${MY_TENANT_ID}/channels/${MY_CHANNEL_ID}/messages`,
expirationDateTime: moment().add(1, 'hours'),
includeResourceData: false,
}
const config = {
headers: {
Authorization: `Bearer ${token}`
}
}
const response = await axios.post(url, subscription, config).catch(e => console.log(e) )
发布到此 url 后,我从 Teams 取回验证令牌请求到我的 notificationUrl 路由,其设置如下:
router.post('/teams/events', async (req, res) => {
if (req.query.validationToken) {
res.set('Content-Type', 'text/plain');
return res.status(200).send(req.query.validationToken);
}
// code that does things with notification below
错误:
但是,最初创建订阅的请求失败了,我得到以下信息:
'Operation: Create;Exception: [Status Code: Forbidden;Reason: Caller does not have access to '/teams('TEAM_ID_HERE')/channels('CHANNEL_ID_HERE')/消息资源]'
其他信息: 这是一个标准(非私人)频道,我的用户是会员
我在获取授权令牌时请求这些权限 'ChannelMessage.Read.All Group.ReadWrite.All Directory.ReadWrite.All ChannelMessage.Send user.read openid profile offline_access'
My API permissions look like this
我缺少什么才能创建订阅?
在尝试使其在 Microsoft Graph Explorer 上运行后,我意识到我尝试访问的资源 url 路径的 ID 错误。
团队/${MY_TENANT_ID}/频道/${MY_CHANNEL_ID}/消息
应该是
团队/${MY_GROUP_ID}/频道/${MY_CHANNEL_ID}/消息
这是错误的来源,更改 ID 修复了它。