Javascript AzureAd使用Rest服务

Javascript AzureAd使用Rest服务,javascript,azure,rest,asp.net-core,azure-active-directory,Javascript,Azure,Rest,Asp.net Core,Azure Active Directory,RestAPI:我有一个运行Asp核心的RestAPI,带有AzureAd身份验证 WebApp:我有一个单独的WebApplication,它以Asp核心作为后端,使用Javascript前端 WebApp后端通过AzureAd进行身份验证,然后根据RestAPI检查用户是否已注册 我希望javascript客户端能够直接使用RESTAPI。我应该如何在不公开accesstoken的情况下进行此操作 我可以将请求从Javascript发送到WebApp后端->Rest API。但我确实希望避免

RestAPI:我有一个运行Asp核心的RestAPI,带有AzureAd身份验证

WebApp:我有一个单独的WebApplication,它以Asp核心作为后端,使用Javascript前端

WebApp后端通过AzureAd进行身份验证,然后根据RestAPI检查用户是否已注册

我希望javascript客户端能够直接使用RESTAPI。我应该如何在不公开accesstoken的情况下进行此操作


我可以将请求从Javascript发送到WebApp后端->Rest API。但我确实希望避免这种情况,因为不必要的代码。

在这种情况下,您可以尝试在JS客户端中实现。利用
**adal**
获得身份验证令牌,当您调用Web Api时,它将在HTTP请求中添加身份验证头

例如

假设我们想从JS客户端调用Microsoft Graph API,我们开发了一个node.JS脚本,它使用request为组调用Microsoft Graph API来创建一个新的安全组

下面的代码显示如何使用该脚本中的API。请注意,令牌和名称是通过参数传递的。此外,此函数返回一个承诺,该承诺在正确创建组时被成功解析,在未正确创建组时被拒绝

var request = require('request');

function createGroup(token, name) {
  return new Promise((resolve, reject) => {
    const options = {
      method: 'POST',
      url: 'https://graph.microsoft.com/v1.0/groups/',
      headers: {
        'Authorization': 'Bearer ' + token,
        'content-type': 'application/json'
      },
      body: JSON.stringify({
        "displayName": name,
        "mailEnabled": false,
        "securityEnabled": true
      })
    };

    request(options, (error, response, body) => {
      const result = JSON.parse(body);
      if (!error && response.statusCode == 204) {
        resolve(result.value);
      } else {
        reject(result);
      }
    });
  });
}
为了调用Microsoft Graph API,我们需要进行身份验证,这就是为什么在上一节中,我们将令牌作为用于执行请求的函数的参数

我们应该添加以下代码来生成令牌。请注意,我们正在使用adal npm包来简化此操作,调用AuthenticationContext对象的acquireTokenWithClientCredentials方法。此外,我们还有一些常量需要使用之前获得的客户端id和机密以及租户名称进行更新

var adal = require('adal-node');

const TENANT = "{tenant-name-here}.onmicrosoft.com";
const CLIENT_ID = "{Application-id-here}";
const CLIENT_SECRET = "{Application-key-here}";

function getToken() {
  return new Promise((resolve, reject) => {
    const authContext = new adal.AuthenticationContext(`https://login.microsoftonline.com/${TENANT}`);
    authContext.acquireTokenWithClientCredentials(GRAPH_URL, CLIENT_ID, CLIENT_SECRET, (err, tokenRes) => {
      if (err) { reject(err); }
      resolve(tokenRes.accessToken);
    });
  });

希望有帮助。

您可以使用它来帮助您在单页应用程序中使用Azure AD处理身份验证。和注销访问受保护web api的令牌。非常感谢,先生,我将对此进行研究。很高兴知道它有帮助,请接受作为答案,因为它将帮助其他有同样问题的人。