我创建了一个简单的 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", redirected: 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?有任何想法吗?
再次感谢。