我们在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('*');
如何为所有用户提供基本权限,但管理员稍后会在应用程序中请求其他权限?
我已经审核过的一些资源无济于事:
http://www.mikepackdev.com/blog_posts/2-Dynamically-Requesting-Facebook-Permissions-with-OmniAuth
Switching between web and touch interfaces on Facebook login using Omniauth and Rails 3
https://github.com/zquestz/omniauth-google-oauth2/issues/143
https://azure.microsoft.com/en-us/documentation/articles/active-directory-protocols-oauth-code/
答案 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