当前位置: 首页 > 知识库问答 >
问题:

通过AJAX访问AD安全Azure功能

祁嘉木
2023-03-14

我有一个带有Web触发器endpoint的Azure函数设置,我想将其用作React应用程序的后端。没有身份验证设置,它工作正常。当我使用AD设置应用服务身份验证时,当我直接通过浏览器访问时(身份验证后),它工作正常,但当我尝试从提供承载令牌的JS访问时,我得到了401。

const response = await axios.get(`${window.apiUrl}api/jobs`, {
    headers: {
      'Content-Type': 'application/json',
      Authorization: 'Bearer ' + token.accessToken,
    },
  });

客户端应用程序正在Azure上运行,并已注册为Azure AD应用程序。我能够成功地验证、查询AD和使用MS Graph API。

我正在使用内置的Azure App Services广告验证。我将客户端ID设置为与前面提到的Azure AD应用程序相同的客户端ID,以及相同的颁发者Url。

尝试获取会话令牌:

const accessToken = await authProvider.getAccessToken();
const idToken = await authProvider.getIdToken();
const login = await axios.post(
  'https://<appname>.azurewebsites.net/.auth/login/aad',
    { access_token: accessToken.accessToken },
    {
      headers: {
        'Content-Type': 'application/json',
      },
    },
  );

更多信息

我的aud声明是00000003-0000-0000-c000-000000000000。在Azure门户中,我的Azure Function配置为使用与我的SPA相同的Azure AD应用程序。我在SPA中使用MSAL. js进行身份验证。我请求用户。阅读和目录。阅读。所有范围。

共有2个答案

司徒耀
2023-03-14

您不能为Microsoft Graph请求令牌并使用它来调用您自己的API。受众“00000003-0000-0000-c000-000000000000”表示“用于Microsoft Graph”。

在MSAL中,当您请求令牌时,您需要调整范围。删除用户。阅读,删除目录。阅读。全部并添加“应用程序ID URI”,末尾 /.default。您可以在portal.azure.com.应用程序注册的“公开API”边栏选项卡中找到应用程序ID URI示例:https://SaeedApp/. default

如果需要同时执行这两项操作,则一次只能为一个资源请求访问令牌。但是,您可以为一个资源请求任意数量的范围(用户。读取和目录。读取。所有都是同一资源的两个范围)。

因此,您需要发出两组请求:1)获取具有Microsoft Graph所需所有作用域的访问令牌2)获取具有API所需所有作用域的访问令牌

原因背后的原因:如果我可以获取用于您的API的访问令牌并使用它调用Microsoft Graph,那么这将打开“重播”攻击,其中一个资源API被黑客入侵,控制一个资源的黑客现在可以回复访问令牌它从客户端收到的所有其他资源API。

松茂实
2023-03-14

Microsoft发布了一篇题为Azure应用服务中身份验证和授权的高级使用的操作方法文章。在关于验证来自提供商的令牌的部分中,它说:

在客户端定向登录中,应用程序手动将用户登录到提供商,然后将身份验证令牌提交给应用程序服务进行验证(请参阅身份验证流)。此验证本身实际上并不授予您对所需应用程序资源的访问权限,但成功的验证将为您提供一个会话令牌,您可以使用该令牌访问应用程序资源。

因此,您需要获取会话令牌才能访问应用程序资源。

请求:

POST https://<appname>.azurewebsites.net/.auth/login/aad HTTP/1.1
Content-Type: application/json

{"id_token":"<token>","access_token":"<token>"}

答复:

{
    "authenticationToken": "...",
    "user": {
        "userId": "sid:..."
    }
}

获得此会话令牌(身份验证令牌)后,您可以通过将X-ZUMO-AUTH标头添加到HTTP请求来访问受保护的应用程序资源

GET https://<appname>.azurewebsites.net/api/products/1
X-ZUMO-AUTH: <authenticationToken_value>
 类似资料:
  • 我有一个Xamarin。窗体使用Azure ADB2C身份验证的应用程序。虽然我可以在工作中进行签名,但我仍然需要以某种方式获取用户信息(如用户名和存储在AAD中的其他属性),以便在应用程序中显示它。为了实现这一目标,我找不到任何合适的留档。还有谁有类似的问题或者知道我应该找什么吗?

  • 在我们这家小公司的团队中,我遇到了一些挫折,围绕着使用Azure Databricks中将Azure Databricks作为我们的增量表的后端(我是这家公司和Databricks的新手,所以我可能解释的任何事情都是在我之前决定的,我意识到其中一些可能是有问题的, 但不是寻找对此的看法)。 本质上,工程团队正在构建数据摄取管道(作为python文件,而不是笔记本),这些管道在Azure Datab

  • 考虑以下队列防御: 设置AUTHREC OBJTYPE(QMGR)组('mq-user')AUTHADD(INQ,DSP,CONNECT) MCAUSER在DEFINE CHANNEL和setchlauth中的含义是什么? tcs-mq-user应该属于mq-user组吗? 这是否意味着只有tcs-mq-user在绑定模式下可以访问队列管理器?现在,如果我想在绑定模式下为另一个用户提供访问权限,我

  • 我想用节点js验证Azure活动目录中的用户(我是Azure和活动目录的新手),我读了很多留档,有两种方法可以做到这一点。第一:我的Web请求通过Microsoft提供给我的表单进行身份验证,然后用户登录,这重定向到我的URL 第二:(这是我需要的方式)我使用的是Oaust2,带有 我只是关注这个博客:https://blog.jongallant.com/2017/11/azure-rest-a

  • 异步Javascript和XML(AJAX)是用于开发Web应用程序以提供丰富用户体验的最新技术之一。由于它是一项新技术,因此尚未完成许多安全问题,以下是AJAX中的少数安全问题。 攻击面更多,因为需要保护更多输入。 它还公开了应用程序的内部功能。 无法保护身份验证信息和会话。 客户端和服务器端之间存在非常狭窄的界限,因此存在安全性错误的可能性。  示例 以下是AJAX安全性的示例 - 2006年

  • 问题内容: 最初一切正常,我有一个类似的组件。这个 在其他档案中 到这里为止一切正常,但是当我在 它不起作用。我已经从react-redux导入了connect 问题答案: 接受为第四参数。在此选项参数中,您可以将flag设置为true。之后,您可以使用like 来访问ref的函数