No' Access-Control-Allow-Origin' Microsoft Online Auth的标题

时间:2016-07-11 23:55:52

标签: javascript cors microsoft-graph

我正在尝试使用Microsoft图表OAuth端点提出访问令牌的简单请求。当我发送下面的简单请求时,我得到了

  

否'访问控制 - 允许 - 来源'标头出现在请求的资源上。 Origin' localhost:8080 / myapprunninglocally'因此不允许访问。**"

var xhttp = new XMLHttpRequest();
xhttp.open("GET", "https://login.microsoftonline.com/common/oauth2/authorize?client_id=<client_id>&scope=wl.signin%20wl.calendars_update&response_type=token&redirect_uri=localhost:8080/myapprunninglocally", true);
xhttp.send();

我还使用Microsoft Azure Directory注册了此应用,请求了所有权限,并使用了委派的client_id

我已阅读过CORS,但我知道跨源策略,但我知道有些API会在其响应头中公开包含'Access-Control-Allow-Origin'的端点。有人能帮忙吗?

2 个答案:

答案 0 :(得分:3)

你无法从客户端运行它。部分CORS设置要求microsoftonline.com将您的域添加到其支持CORS的白名单中。

我建议您在服务器上拨打电话,然后将请求服务器发送到服务器。

答案 1 :(得分:3)

要在Javascript中集成AAD,我们建议您使用azure-activedirectory-library-for-js这是javascript中的库,以便前端轻松集成AAD。

在我们使用ADAL for JS之前,我们需要注意两个选项:

以下是从Microsoft Graph获取访问令牌的代码示例:

<script src="https://secure.aadcdn.microsoftonline-p.com/lib/1.0.14/js/adal.min.js"></script>

<body>
<a href="#" onclick="login();">login</a>
<a href="#" onclick="getToken()">access token</a>
</body>
<script type="text/javascript">
    var configOptions = {
        tenant: "<tenant_id>", // Optional by default, it sends common
        clientId: "<client_id>",
        postLogoutRedirectUri: window.location.origin,
    }
    window.authContext = new AuthenticationContext(configOptions);

    var isCallback = authContext.isCallback(window.location.hash);
    authContext.handleWindowCallback();

    function getToken(){
        authContext.acquireToken("https://graph.microsoft.com",function(error, token){
            console.log(error);
            console.log(token);
        })
    }
    function login(){
        authContext.login();
    }
</script>