我创建了一个简单的 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 的评论和文档中的此页面:服务到服务访问令牌请求 https://learn.microsoft.com/en-us/previous-versions/azure/dn645543(v=azure.100)?redirectedfrom=MSDN
这是我的新代码:
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);
}
当我调用上面的函数时,我得到以下响应:
响应{类型:“cors”,网址:“https://login.microsoftonline.com/.../oauth2/token”,重定向:false,状态:400,ok:false,…}
身体: (...)
身体使用:假
标题:标题{}
好的:假的
重定向:假
状态:400
statusText:“错误请求”
类型:“cors”
网址:“https://login.microsoftonline.com/.../oauth2/token”proto: 回复
也许还有另一种方法来启动 REACT 应用程序,以便不检查 CORS?有任何想法吗?
再次感谢。