Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/460.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 否';访问控制允许原点';带有Microsoft Online Auth的标题_Javascript_Cors_Microsoft Graph Api - Fatal编程技术网

Javascript 否';访问控制允许原点';带有Microsoft Online Auth的标题

Javascript 否';访问控制允许原点';带有Microsoft Online Auth的标题,javascript,cors,microsoft-graph-api,Javascript,Cors,Microsoft Graph Api,我试图使用MicrosoftGraphOAuth端点发出一个简单的请求来获取访问令牌。当我发送下面的简单请求时,我得到 请求的资源上不存在“Access Control Allow Origin”标头。因此,不允许访问源“localhost:8080/myapprunninglocal”。* var xhttp=new-XMLHttpRequest(); xhttp.open(“GET”https://login.microsoftonline.com/common/oauth2/authori

我试图使用MicrosoftGraphOAuth端点发出一个简单的请求来获取访问令牌。当我发送下面的简单请求时,我得到

请求的资源上不存在“Access Control Allow Origin”标头。因此,不允许访问源“localhost:8080/myapprunninglocal”。*

var xhttp=new-XMLHttpRequest();
xhttp.open(“GET”https://login.microsoftonline.com/common/oauth2/authorize?client_id=&scope=wl.signin%20wl.calendars_update&response_type=token&redirect_uri=localhost:8080/myapprunninglocally“,对);
xhttp.send();
我还使用Microsoft Azure Directory注册了此应用程序,请求了所有权限,并使用了委托的
客户端id


我已经阅读了CORS,我知道跨源策略。但是,我知道有一些API公开端点,这些端点在其响应头中包含了
“Access-Control-Allow-Origin”
。有人能帮忙吗?

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


我建议您在服务器上调用一个服务,然后将请求服务器发送到服务器。

要将AAD集成到javascript中,我们建议您使用javascript中的库,以便前端轻松集成AAD

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

  • 根据位于以下位置的节点: 注意:此示例在Internet Explorer中不起作用。请使用其他浏览器,如Google Chrome。ADAL.js使用iframe为SPA自己的后端以外的资源获取CORS API令牌。这些iframe请求需要访问浏览器的Cookie才能通过Azure Active Directory进行身份验证。遗憾的是,Cookie无法访问当应用程序在localhost中运行时,可以向Internet Explorer发送

  • 启用Azure AD应用程序的
    oauth2AllowImplicitFlow
    。有关详细步骤,请参阅
以下是从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>

var配置选项={
租户:,//默认情况下为可选,它发送公共
客户ID:“,
postLogoutRedirectUri:window.location.origin,
}
window.authContext=新的AuthenticationContext(配置选项);
var isCallback=authContext.isCallback(window.location.hash);
authContext.HandleIndowCallback();
函数getToken(){
authContext.acquireToken(“https://graph.microsoft.com,函数(错误,标记){
console.log(错误);
console.log(令牌);
})
}
函数登录(){
authContext.login();
}
<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>