【问题标题】:Incremental OAuth consent with Microsoft Graph api使用 Microsoft Graph api 的增量 OAuth 同意
【发布时间】:2017-01-04 11:48:06
【问题描述】:

我们在 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 授权 URL,但这也不起作用。这是我使用的示例网址:

https://login.microsoftonline.com/common/oauth2/authorize?response_type=code&redirect_uri=https%3A%2F%2Fl.xxxxxx.com%3A50000%2Fauth%2Fmicrosoft_graph%2Fcallback&client_id=xxxxxx-xxx-xxx-xxx-xxxx&scope=https%3A%2F%2Fgraph.microsoft.com%2Femail%20https%3A%2F%2Fgraph.microsoft.com%2Fprofile%20https%3A%2F%2Fgraph.microsoft.com%2FUser.Read%20https%3A%2F%2Fgraph.microsoft.com%2FUser.ReadBasic.All%20https%3A%2F%2Fgraph.microsoft.com%2FGroup.Read.All

如何要求所有用户拥有基本权限,但管理员稍后会在应用程序中请求额外权限?

我已经查看了一些资源但无济于事:

【问题讨论】:

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


    【解决方案1】:

    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

    【讨论】:

    • 我为 Microsoft 支持付费,他们也说了同样的话。太糟糕了,这对于 v1 端点是不可能的,而 v2.0 目前有很多限制。但这似乎是前进的方向。
    猜你喜欢
    • 2022-12-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-01-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多