2016-12-05 18 views
1

我试图通过发送POST请求,但总是收到以下错误得到AAD的OAuth 2.0令牌。(请注意,使用完美的作品,并使用招在C#中类似的代码/邮差)获取Azure的活动目录标记的JavaScript

产地http://localhost:24310在访问控制允许来源头部没有发现

function CallAAD() 
     {    
      var settings = { 
       "async": true, 
       "crossDomain": true, 
       "url": "https://login.microsoftonline.com/saurabhpersonalad.onmicrosoft.com/oauth2/token", 
       "method": "POST", 
       "headers": { 
        "content-type": "application/x-www-form-urlencoded", 
        "cache-control": "no-cache",     
        "Access-Control-Allow-Origin":"*" 
       }, 
       "data": { 
        "grant_type": "client_credentials", 
        "client_id": "18cff243-e5f1-4e6e-9432-1790724eeb50", 
        "client_secret": "aUoWP9tNSDXblVvn/blmFkJtGyo8HM+YIb4JeIipdL8=", 
        "resource": "https://saurabhpersonalad.onmicrosoft.com/WebApplication6" 
       } 
      } 

      $.support.cors = true; 

      $.ajax(settings).done(function (response) { 
       debugger; 
       alert(response); 
      }); 
+1

此代码旨在运行在哪里?在客户端(例如在浏览器中)? –

+0

@PhilippeSignoret是的 – Charu

+0

你不应该把客户端的秘密放在前端。有为单页JavaScript应用程序设计的流程。 – juunas

回答

1

client_credentials grant_type作为grant_type是保密的客户谁可以保持客户端秘密的安全,而jQuery的是为基于浏览器的公共机构提供服务。您可能想使用您的Web应用程序的后端使用客户端凭据调用Web API。

但是,要在broswer客户端上获得AAD oauth 2.0令牌,我们建议您使用azure-activedirectory-library-for-js这是一个JavaScript前端库,用于轻松集成AAD。详情请参阅No 'Access-Control-Allow-Origin' header with Microsoft Online Auth

+0

那么你的意思是用户将被重定向到登录页面,如果我想从jquery做到这一点? – Charu

+0

是的,你是对的。通常,'client_credentials' grant_type仅用于应用程序场景。 –

+0

我正在尝试从JS访问AAD资源,这是CRM Dynamics在线的网络资源。如果我在同一个AAD中注册了CRM和终端资源,仍然需要用户登录。没有提示用户而无法默默登录。 – Charu