使用Microsoft Graph api增加OAuth同意

时间:2016-08-28 08:37:44

标签: api azure oauth-2.0 office365 microsoft-graph

我们在Azure AD中有一个使用Microsoft Graph API的应用程序。该应用程序使用4个基本权限成功运行:电子邮件,个人资料User.Read User.ReadBasic.All

这些权限允许普通用户(非管理员)OAuth对我们的应用进行身份验证。

我们现在正在为管理员用户构建一个功能,让他们可以看到他们的群组。小组范围需要管理员同意,具体如下:http://graph.microsoft.io/en-us/docs/authorization/permission_scopes

关键是,如果我在Azure AD中的委派权限下添加Group.Read.All权限,这会导致普通用户能够使用可怕的错误登录“AADSTS90093:由于缺少权限,调用主体无法同意”

我尝试过手动制作明确请求范围的OAuth授权网址,但这也不起作用。这是我使用的示例网址:

const transformS = require('./index.js')();

transformS.on('data', data => {
  console.log(data.toString());
});

transformS.push('*');

如何为所有用户提供基本权限,但管理员稍后会在应用程序中请求其他权限?

我已经审核过的一些资源无济于事:

1 个答案:

答案 0 :(得分:0)

Azure AD V2.0端点已支持增量和动态同意。您可以注册该应用程序以使用here中的Azure AD V2.0身份验证终结点。

我们可以为普通用户和管理员提供两个按钮登录。以下是使用V2.0端点的正常用户登录参考的步骤:

1.登录并获取OAuth代码:

GET: https://login.microsoftonline.com/common/oauth2/v2.0/authorize?client_id={clientId}&scope=openid%20https%3A%2F%2Fgraph.microsoft.com%2FMail.ReadWrite%20https%3A%2F%2Fgraph.microsoft.com%2FUser.ReadBasic.All%20https%3A%2F%2Fgraph.microsoft.com%2FUser.Read&response_type=code+id_token&&redirect_uri={redirectUri}&nonce=678910

2.请求访问令牌

POST: https://login.microsoftonline.com/common/oauth2/v2.0/token

client_id={clientId}&scope=openid%20https%3A%2F%2Fgraph.microsoft.com%2FMail.ReadWrite%20https%3A%2F%2Fgraph.microsoft.com%2FUser.ReadBasic.All%20https%3A%2F%2Fgraph.microsoft.com%2FUser.Read
&code={codeFromPreviousRequest}&redirect_uri={RedirectUri}&grant_type=authorization_code&client_secret={client_secret}

要让管理员登录,我们只需添加上述请求的附加范围。以下是一些有关此主题的有用文章:

What's different about the v2.0 endpoint?

v2.0 Protocols - OpenID Connect v2.0 Protocols - OAuth 2.0 Authorization Code Flow