小编Dum*_*DED的帖子

HttpClient 在 Blazor Web assembly 应用程序中的请求中不包含 cookie

我有一个 Blazor Web assembly 应用程序,其中包含一个用户服务,旨在访问 API 来检索用户的详细信息。该服务如下所示:

public class UserDataService : IUserDataService
{
    public readonly HttpClient _HttpClient;

    public UserDataService(HttpClient httpClientDI)
    {
        _HttpClient = httpClientDI;
    }

    public async Task<User> GetUserInfo()
    {
        try
        {
            return await _HttpClient.GetFromJsonAsync<User>("api/users/MyUserInfo");
        }
        catch (Exception ex)
        {
            Console.WriteLine(ex.Message);
            throw;
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

该 API 专门设计用于从客户端请求中读取加密的 cookie。该 cookie 包含用户的电子邮件地址,用户信息服务使用它来检索更详细的用户信息集。

[HttpGet("MyUserInfo")]
public User MyUserInfo()
{
    var myCookie = HttpContext.Request.Cookies.FirstOrDefault(c => c.Key == "MyCookie");

    var userMask = JsonConvert.DeserializeObject<AuthUserMask>(Protector.Unprotect(myCookie.Value));

    var user = UserService.Find(userMask.Email).FirstOrDefault();

    return user;
}
Run Code Online (Sandbox Code Playgroud)

当我运行 Web 应用程序时,我能够验证浏览器中是否存在 cookie,但是当应用程序向 API …

c# cookies dotnet-httpclient asp.net-core blazor-webassembly

10
推荐指数
2
解决办法
9213
查看次数

在 Blazor 服务器中的自定义委托处理程序中获取范围服务

我正在尝试设置我们的 Blazor 服务器应用程序以使用自定义委托处理程序,该处理程序会将不记名令牌附加到我们 API 的所有传出请求。委托处理程序使用令牌服务来处理令牌的检索以及令牌过期时的刷新过程。代码如下所示:

\n
public class HttpAuthorizationHandler : DelegatingHandler\n{\n    private ITokenService _tokenService { get; set; }\n\n    public HttpAuthorizationHandler(ITokenService tokenService)\n    {\n        _tokenService = tokenService;\n    }\n\n    protected async override Task<HttpResponseMessage> SendAsync(HttpRequestMessage request, CancellationToken cancellationToken)\n    {\n        var token = await _tokenService.TryGetToken();\n\n        request.Headers.Authorization = new System.Net.Http.Headers.AuthenticationHeaderValue("bearer", token);\n\n        return await base.SendAsync(request, cancellationToken);\n    }\n}\n
Run Code Online (Sandbox Code Playgroud)\n

我已将令牌服务注册为 Startup.cs 中的范围服务,并了解该服务的同一实例将在请求的生命周期内在 DI 容器中保持活动状态。如果我理解正确,这意味着我可以将令牌值分配给 App.razor 页面中的服务,并通过对令牌服务的任何后续调用来获取它们:

\n
@code {\n  [Parameter]\n  public string AccessToken { get; set; }\n  [Parameter]\n  public string RefreshToken { get; set; }\n\n  [Inject] private ITokenService …
Run Code Online (Sandbox Code Playgroud)

c# dependency-injection blazor-server-side .net-5

10
推荐指数
1
解决办法
4617
查看次数

尝试为 (Azurite) Azure BLOB 存储生成 SAS URI 时,“服务器无法验证请求”

我已经梳理了这个问题的至少十几个不同版本,但到目前为止,没有一个版本能给出我所遇到的问题的答案。我正在尝试开发一个概念验证,用于使用 Azurite 和具有相应存储帐户密钥的服务 SAS 从 Azure BLOB 存储检索图像。我正在使用众所周知的 Azurite 存储帐户凭据,如此处所示。在 C# 中似乎有无数种方法可以完成此类操作,但我选择宽松地遵循此示例,最终得到如下结果:

public Uri GetSharedKeySasUrl()
{
    BlobServiceClient serviceClient = new BlobServiceClient(
        new Uri("http://127.0.0.1:10000/devstoreaccount1/"),
        new Azure.Storage.StorageSharedKeyCredential(
            "devstoreaccount1",
            "Eby8vdM02xNOcqFlqUwJPLlmEtlCDXJ1OUzFT50uSRZ6IFsuFq2UVErCz4I6tq/K1SZFPTOtr/KBHBeksoGMGw=="
        )
    );

    var blobContainer = serviceClient.GetBlobContainerClient("images");

    var blobClient = blobContainer.GetBlobClient("00000-pano.jpg");

    BlobSasBuilder sasBuilder = new BlobSasBuilder()
    {
        BlobContainerName = "images",
        BlobName = "00000-pano.jpg",
        Resource = "b",
        StartsOn = DateTimeOffset.UtcNow,
        ExpiresOn = DateTimeOffset.UtcNow.AddHours(1)
    };

    sasBuilder.SetPermissions(BlobSasPermissions.Read);

    Uri sasUri = blobClient.GenerateSasUri(sasBuilder);
    Debug.WriteLine("SAS URI for blob is: {0}", sasUri);

    return sasUri;
}
Run Code Online (Sandbox Code Playgroud)

这会生成一个看起来应该可以正常工作的URL …

.net c# azure-blob-storage azurite

7
推荐指数
2
解决办法
2736
查看次数