在Azure Active Directory上启用CORS

时间:2018-10-16 15:30:26

标签: angular typescript azure cors azure-active-directory

我试图在Angular 6应用程序中使用以下方法以编程方式从Azure Active Directory获取访问令牌。

    let body1 = new FormData()
    body1.append("resource", environment.config.clientId)
    body1.append("grant_type", "client_credentials")
    body1.append("client_id", environment.config.clientId)
    body1.append("client_secret", "*****")

    return this._http.post("https://login.microsoftonline.com/" + environment.config.tenant + "/oauth2/token", body1)

我能够通过Postman中的此URL检索访问令牌,但是在通过我的应用程序调用它时被CORS阻止。错误如下。

    Failed to load https://login.microsoftonline.com/*****/oauth2/token: 
Response to preflight request doesn't pass access control check: No 'Access-
Control-Allow-Origin' header is present on the requested resource. Origin 
'http://localhost:4200' is therefore not allowed access.

那么,如何为所有域在Azure Active Directory上启用CORS?

1 个答案:

答案 0 :(得分:5)

简单,您不需要。

您正在做的是将您应用的客户秘密公开。 请记住,该请求将通过用户的设备发出。 这样他们就可以观察并捕获您的秘密。 这就是令牌端点不支持CORS,并且可能永远不支持的原因。

从前端JS应用程序获取令牌的方法是使用隐式授予流。 或者,如果您确实需要仅用于应用程序的令牌,则必须从后端应用程序发出您尝试过的请求。

隐式授予流使您可以在用户登录时直接从授权端点获取令牌。 您可以使用ADAL.JS / MSAL.JS来协助完成此工作。 您的本机应用程序无法证明其身份,因此没有用户身份的令牌就不能拥有。