【问题标题】:ADAL Token used on server for Graph API服务器上用于图形 API 的 ADAL 令牌
【发布时间】:2018-07-12 03:37:50
【问题描述】:

我正在开发一个使用 Azure AD 进行身份验证的 Angular2+ 应用程序。我需要将令牌传递给我的 Web API 层(使用 HttpInterceptor 成功运行),然后在服务器端使用该令牌调用 Microsoft Graph。

如何将一个令牌转换为另一个令牌,最好是在服务器上?

【问题讨论】:

    标签: azure-active-directory microsoft-graph-api adal


    【解决方案1】:

    正是代表流程的场景。

    这是我在上面写的博客文章:https://joonasw.net/view/azure-ad-on-behalf-of-aspnet-core

    这是一个相当长的句子,所以让我们看一个使用它的示例场景:

    • JavaScript 单页应用程序使用 Azure AD 对用户进行身份验证
    • SPA 为其后端 API 获取访问令牌并调用 API
    • API 然后需要从 Microsoft Graph API 获取有关用户经理的信息

    在这种情况下,基本上有两种选择:

    1. 使用代表授权获取允许 API 以用户身份调用 MS Graph 的访问令牌
    2. 使用客户端凭据授权作为 API 进行调用,无需用户上下文

    第一个选项使用委托权限,这意味着可以返回的数据基于 API 和用户被允许访问的内容。它确实要求对该 API 的调用是使用用户上下文进行的。

    第二个选项将改为使用应用程序权限,在这种情况下,应用程序本身需要有权访问组织中任何用户的此信息。

    您大概可以理解为什么通常首选使用委派权限。它遵循最小特权原则。

    您可以在https://github.com/juunas11/azure-ad-on-behalf-of-sample-aspnetcore 找到本文中使用的示例应用程序。

    因此,您基本上可以交换从 SPA 获得的令牌以及 API 的凭据,以获取另一个 API 的新访问令牌。这个新令牌也将在用户上下文中,并将使用委派权限。

    这是一个进行令牌交换的 HTTP 请求示例:

    POST https://login.microsoftonline.com/joonasapps.onmicrosoft.com/oauth2/token HTTP/1.1
    Content-Type: application/x-www-form-urlencoded
    Host: login.microsoftonline.com
    Content-Length: 1650
    Expect: 100-continue
    Connection: Keep-Alive
    
    grant_type=urn%3Aietf%3Aparams%3Aoauth%3Agrant-type%3Ajwt-bearer&client_id=f3c39179-62f7-45fc-a469-a64fdfce4f91&client_secret=REDACTED&resource=https%3A%2F%2Fgraph.microsoft.com&assertion=eyJ0eLongAccessTokenForThisApi&requested_token_use=on_behalf_of
    

    您可以在这里找到更多信息:https://docs.microsoft.com/en-us/azure/active-directory/develop/active-directory-protocols-oauth-on-behalf-of

    【讨论】:

    • 很棒的文章,很可能会奏效。我们没有使用 AspNetCore,所以我正在努力(慢慢地)将启动代码转换为非核心。
    • 如果您正在使用“经典”MVC,这将有所帮助:github.com/Azure-Samples/…
    猜你喜欢
    • 2017-10-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-08-15
    • 2018-04-14
    • 1970-01-01
    相关资源
    最近更新 更多