angular - 是否可以从 Angular 获取 AAD 访问 token ?

标签 angular azure http azure-active-directory

我正在尝试从 Angular 获取Azure管理资源端点 token ,尽管我知道它在客户端方面很容易受到攻击。出于某种强有力的原因,我无论如何都在寻求这样做。

因为我可以通过运行此命令获取access_token。

curl -X GET -H 'Content-Type: application/x-www-form-urlencoded' \
-d 'grant_type=client_credentials&client_id=<client-id>&resource=<management-resource-endpoint>&client_secret=<application-secret>' \
https://login.microsoftonline.com/<tenantid>/oauth2/token

我正在尝试将此命令转换为像这样的http get 请求...

getAADToken() {
    const param = new HttpParams();
    param.append('grant_type', 'client_credentials');
    param.append('client_id', <client-id>);
    param.append('resource', '2ff814a6-3304-4ab8-85cb-cd0e6f879c1d');
    param.append('client_secret', <application-secret>);
    return this.http.get<any>("https://login.microsoftonline.com/<tenantid>/oauth2/token", {
      headers: new HttpHeaders().set('Content-Type', 'application/x-www-form-urlencoded'),
      params:param
    });
  }

但是遇到 CORS 问题... enter image description here

最佳答案

您无法执行此操作,因为 Azure AD 不允许您使用浏览器中的客户端凭据流。 他们需要允许跨源请求,而您无法配置该请求。

有很多安全原因导致您无法执行此操作,您提到的最明显的一个是客户端 key 对访问该页面的任何人都是可见的。 此外,任何能够获取该页面文件的人都可以作为应用程序对 API 进行操作,因此追踪谁实际上做了某件事变得非常困难。

通常,当您需要作为应用程序执行某些操作,因为用户无法执行此操作时, 您让用户在前端进行身份验证,以他们的身份调用后端 API,该 API 对用户进行授权,然后对目标 API 进行仅应用程序的身份验证调用。

关于angular - 是否可以从 Angular 获取 AAD 访问 token ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66099402/

相关文章:

javascript - 找不到管道 'safeResourceUrl'

twitter-bootstrap - 如何使用 ngFor 和 bootstrap 4 创建新的一排卡片

python - 如何逐 block 读取大的 Azure blob 存储文件

java - 使用 Ajax 将 @RequestBody 中的多个变量传递给 Spring MVC Controller

c - 如何在C HTTP客户端程序中向文件写入HTTP请求

http - 如何让 netcat 通过多个 TCP 段发送 HTTP header ?

javascript - 如何将 Zoom Chart 与 Angular 2 集成

c# - 如何在不涉及用户身份验证的情况下获取 Azure 访问 token (针对应用程序,而不是用户)?

asp.net-mvc - 如何使用 signalr 将多个客户端连接到同一个 websocket?

Angular:从动态组件传回数据