autodesk-forge - Blazor webassembly http 默认标头 Forge Design Automation
问题描述
早上好,我正在尝试使用 Blazor 和 Net5 开发一个 webapp。我已经成功实现了 3 腿身份验证系统,并将令牌附加到默认标头以供进一步请求。我还在同一进程中实现了 2 条腿身份验证请求,并将两者都保存在本地存储中。
现在我需要开始调用一些数据管理服务来存储和检索模型,并将工作项提交给设计自动化。所有这些都需要将承载令牌与请求一起发送。我想在服务器端管理这部分应用程序,问题是:有没有办法在服务器端使用令牌,然后尝试从本地存储中检索它?
此外,是否可以在客户端应用程序中设置两个不同的 HttpClient 以便能够附加两个不同的令牌,然后在服务器端 Blazor 中使用相同的 http 客户端?我假设我无法从客户端向服务器注入服务。我可以使用 DI 在客户端轻松完成
public async Task<string> PostSignedUrlAsync(string bucketKey, string objectKey)
{
using (var client = new HttpClient())
{
var token = await tokenManager.GetTwoFactorAsync();
using (var request = new HttpRequestMessage(
HttpMethod.Post,
$"https://{configurationManager.Host}/oss/v2/buckets/{bucketKey}/objects/{objectKey}/signed"
)
)
{
request.Headers.Authorization = new AuthenticationHeaderValue("Bearer", token);
using (var response = await client.SendAsync(request))
{
if (response.IsSuccessStatusCode)
{
var json = await response.Content.ReadAsStringAsync();
return JsonConvert.DeserializeObject<PostObjectSigned>(json).SignedUrl;
}
}
return null;
}
}
}
public async Task PostTwoFactorAsync()
{
using (var client = new HttpClient())
{
using (var request = new HttpRequestMessage(
HttpMethod.Post,
$"https://{configurationManager.Host}/authentication/v1/authenticate"
)
)
{
var body = $"client_id={configurationManager.ClientId}&client_secret={configurationManager.ClientSecret}&grant_type=client_credentials&scope={configurationManager.ScopesInternal}";
request.Content = new StringContent(body, Encoding.UTF8, "application/x-www-form-urlencoded");
using (var response = await client.SendAsync(request))
{
if (response.IsSuccessStatusCode)
{
var json = await response.Content.ReadAsStringAsync();
TokenInternal = JsonConvert.DeserializeObject<Token>(json);
TokenInternal.ExpiresOn = DateTime.UtcNow.AddSeconds(TokenInternal.ExpiresIn) - TimeSpan.FromMinutes(10);
await localStorage.SetItemAsync(configurationManager.LocalStorageKeyInternal, TokenInternal);
}
}
}
}
}
也许是一个简单的问题,但我找不到任何可以解释如何解决此“连接”的示例,现在 Forge 文档中围绕 Blazor 实现的示例适用于此任务。
提前致谢
解决方案
推荐阅读
- java - 带有 POSTGRES 的 Keycloak 独立模式始终连接到本地数据库
- android - Native View 未填充 React Native View 父级
- delphi - TDataSet OnFilterRecord 事件中过滤掉的记录的可见性
- networking - linux内核如何支持在一个平台设备上探测两个端口?
- laravel - 将文件从 Laravel 应用程序上传到 BitBucket
- ruby-on-rails - 来自控制器的 Ruby on Rails APi 调用逻辑过多。我在哪里以及如何使它更简单?
- mysql - 当我有 CTE 时,将 Set 函数放在 MySQL 的什么位置?
- python - 鼠标停止时如何显示此消息
- python - 我们如何编写查询集来比较不同模型的两个 id 并以 html 形式获取与 id 相关的数据,如名称、地址
- c# - 使用 .NET 4.5 的 64 位应用程序调用本机 DLL 方法时出现错误 0xc0000374