我创建了一个简单的 REACT 应用程序,它只能在连接到我们网络上的大屏幕的本地 PC 上运行。限内部使用!它就像一个广告牌或仪表板。用户交互为零。屏幕不是触摸屏,也没有连接键盘和鼠标。因此没有用户登录。
构建 REACT 应用程序,然后将其部署到 PC 上的文件夹中。全部自动化。初始部署包括所有当前数据。然后在 Windows 启动时执行类似这样的命令:“python -m http.server 3000”(只是示例......)
该应用程序具有随应用程序一起部署的初始数据,但是,我希望它也能够调用安全的 Azure WebAPI 服务以每隔几分钟获取更新的统计信息。非常小的数据。主要是整数值。我只想提供一些实时更新。
我的 REACT 应用程序可以正常工作(如果 WEBAPI 不安全)或者个别调用允许匿名。但是,我们的业务规则要求所有端点都是安全的。
此应用在本地运行,但 API 是 Azure 应用服务。
我已将 Azure AD 中的 REACT 应用程序设置为注册应用程序,并将其配置为有权调用 WEBAPI 服务。
我有许多控制台应用程序,它们的设置和工作方式与这个 REACT 应用程序基本相同。对于 C# 守护程序应用程序,有一个 MSAL 包可以轻松完成。
我正在尝试学习 REACT,而不是将其构建为另一个 WPF 或 UWP 应用程序,我想尝试使用 REACT。
所以,我知道我需要一个访问令牌。我正在考虑客户端 ID 和 Secret,就像我在用 C# 编写的 C# 守护程序客户端中所做的那样。
如果没有用户登录,我找不到任何 REACT 或 Angular 示例。请记住,PC 没有输入设备。仅显示。同样,我的应用没有用户。它调用安全 API 来获取数据。就是这样。
谢谢你的帮助。
使用 Joy Wang 的评论和文档中的此页面: 服务到服务访问令牌请求
这是我的新代码:
const adalConfig = {
tenant: '...',
clientId: '...',
clientSecret: '...',
authority: 'https://login.microsoftonline.com/{tenant}/oauth2/token',
endpoints: {
apiResourceId: 'api://bbbbbb-...',
},
};
function getAccessToken() {
var requestParams = {
grant_type: 'client_credentials',
client_id: adalConfig.clientId,
client_secret: adalConfig.clientSecret,
resource: adalConfig.endpoints.apiResourceId
};
// Make a request to the token issuing endpoint.
fetch(adalConfig.authority,
{
method: 'POST',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify( requestParams )
}).then(response => {
if (response.status >= 200 && response.status < 300) {
console.log(response);
console.log(response.json());
} else {
console.log('Somthing happened wrong');
console.log(response);
}
}).catch(err => err);
}
当我调用上面的函数时,我得到以下响应:
响应 {type: "cors", url: "https://login.microsoftonline.com/.../oauth2/token", 重定向: false, status: 400, ok: false, ...} body: (... ) bodyUsed: false headers: Headers {} ok: false redirected: false status: 400 statusText: "Bad Request" type: "cors" url: "https://login.microsoftonline.com/.../oauth2/token" 原型:响应
也许还有另一种方法可以启动 REACT 应用程序,以便不检查 CORS?有任何想法吗?
再次感谢。