【问题标题】:Client Credential Flow in Office add-insOffice 加载项中的客户端凭据流
【发布时间】:2020-04-26 18:56:44
【问题描述】:

我正在 Angular 中开发 Outlook 任务窗格加载项,当用户单击加载项按钮时,我想使用客户端凭据流来调用受保护的 Web API。

我尝试使用普通的 httpClient 并执行如下所示的 POST 请求

 let body=new HttpParams();
    body=body.set("grant_type","client_credentials");
    body=body.set("client_id","xxxxxxx");
    body=body.set("client_secret","xxxxxx");
    body=body.set("scope","https://xxxxxx/.default");

    const url="https://login.microsoftonline.com/xxxxx/oauth2/v2.0/token";

    this.httpClient.post(url,body)

我收到如下所示的 CORS 错误

从源“https://xxxx.azurewebsites.net”访问“https://login.microsoftonline.com/xxxx/oauth2/v2.0/token”处的 XMLHttpRequest 已被 CORS 策略阻止:请求的资源上不存在“Access-Control-Allow-Origin”标头。.

有没有办法解决这个错误?在这里也尝试使用 MSAL,但我找不到有关 JS 客户端凭据流的任何文档。它仅适用于 .NET

【问题讨论】:

  • 如果我的回答有帮助,请接受它作为答案(单击答案旁边的复选标记将其从灰色切换为已填充)。谢谢

标签: azure-active-directory outlook-web-addins clientcredential


【解决方案1】:

1.千万不要把client secret放在前端,这样很不安全!

2.我们建议您使用https://github.com/AzureAD/azure-activedirectory-library-for-js。前端轻松集成AAD。详情可以参考No 'Access-Control-Allow-Origin' header with Microsoft Online Auth

client_credentials grant_type 仅用于应用场景。如果您必须使用客户端凭据流,则需要在应用的后端获取访问令牌并将其返回给前端。

【讨论】:

  • 您好,感谢您的回复。我了解 client_credential 授权类型可以在 App only 场景中使用。但就我而言,后端 API 需要 AAD 令牌身份验证,我不想设置另一个中间层来获取访问令牌。您能否详细说明为什么它不安全?我也想改用 MSAL,但在任何文档中都找不到 MSAL.js client_credential 流。
  • 1.如果客户端秘钥放在前端js中,可以通过js源码解析器获取。 2.client_credential存在于服务端。
猜你喜欢
  • 2021-12-22
  • 2017-07-15
  • 1970-01-01
  • 2020-07-07
  • 2012-12-17
  • 2019-04-28
  • 1970-01-01
  • 2020-12-25
  • 1970-01-01
相关资源
最近更新 更多