【发布时间】:2021-03-18 09:28:07
【问题描述】:
早上好, 我正在尝试使用 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 实现的示例提供了适合此任务的示例。
提前致谢
【问题讨论】:
-
嗨,切萨雷,有理由标记autodesk-designautomation
-
是的,考虑到在我提到的关于工作项的问题中,该问题确实与包括 DA 在内的不同服务有关。但如果你认为不相关就没有戏剧。谢谢
-
嗨@Cesare Caoduro,对不起,我忽略了,如果你有oAuth令牌,你可以在标题中传递给DA客户端。 github.com/Autodesk-Forge/forge-api-dotnet-core/blob/… 所有 API 调用都采用带有标头的字典,因此您可以传递自己的 Authorization 标头。见github.com/Autodesk-Forge/forge-api-dotnet-design.automation/…
-
嗨@Madhukar Moogala,问题有点不同。我知道我可以传递标头和授权令牌,但问题更多与从 Blazor WASM 客户端到应用程序服务器端的可能性有关,然后应用程序将调用 DA api 或数据管理 api。所以避免暴露应用程序的WASM部分中的业务逻辑基本上是双跳。
-
如果您可以分享minimal-reproducible-example 可能会更好地了解您的查询,但我无法从sn-ps 中理解。它可以帮助整个社区
标签: autodesk-forge autodesk-data-management autodesk-designautomation