So autorisieren Sie Blazor, ermöglicht es dem Benutzer, die Seite anzuzeigenC#

Ein Treffpunkt für C#-Programmierer
Anonymous
 So autorisieren Sie Blazor, ermöglicht es dem Benutzer, die Seite anzuzeigen

Post by Anonymous »

Es ist, als würde ich an einem Projekt arbeiten, bei dem ich die API in separate Teile und die Blazor -Server -App in separate Teile unterteilt habe. Es ist, als würde ich den API + meinen Service zum Erstellen eines Tokens für den Benutzer erhalten und an den Benutzer zurücksenden, wo nach dem Blazor -Client es verwenden muss, um auf die verschiedenen Seiten zuzugreifen, für die nur autorisiert werden muss oder dass Sie eine bestimmte Rolle/einen bestimmten Rang haben, um auf die Seite zuzugreifen. />
EYJHBGCIOIJIUZ ..../P>
< /blockquote>
Ich weise auf diese Weise Token zu, wenn sich ein Benutzer beispielsweise auf der Website anmeldet. < /p>

Code: Select all

token = "eyJhbGciOiJIUz....";
var options = new CookieOptions
{
HttpOnly = true,
Secure = false,
SameSite = SameSiteMode.Strict
};
httpContext.Response.Cookies.Append(Extension.AuthorizationName, token, options);
< /code>
Wenn mir das Token für das Cookie zugewiesen wird und es festgelegt ist. Danach werde ich an die Seite "Dashboard" gesendet, auf der ich < /p>
habe@attribute [Authorize]
Auf meinem Programm.cs In Blazor habe ich diese Informationen wie unten sehen.

Code: Select all

builder.Services.AddHttpClient(Extension.AuthClient,
client =>
{
client.BaseAddress = new Uri(APIHelper.BackendUrl);
}).AddHttpMessageHandler();

//JWT token
var Audience = builder.Configuration["JwtSettings:Audience"];
builder.Services.AddAuthentication(JwtBearerDefaults.AuthenticationScheme)
.AddJwtBearer(options =>
{
options.Authority = APIHelper.BackendUrl;
options.Audience = Audience;
options.RequireHttpsMetadata = APIHelper.RequireHttpsMetadata;
});

builder.Services.AddAuthorization();
AuthHandle.cs

Code: Select all

private readonly NavigationManager _navigationManager;
private readonly IHttpContextAccessor httpContextAccessor;

public AuthHandler(NavigationManager navigationManager, IHttpContextAccessor _httpContextAccessor)
{
_navigationManager = navigationManager;
httpContextAccessor = _httpContextAccessor;
}

protected override async Task SendAsync(HttpRequestMessage request, CancellationToken cancellationToken)
{
var token = httpContextAccessor.HttpContext.Request.Headers[Extension.AuthorizationName];

if (!string.IsNullOrEmpty(token))
{
request.Headers.Authorization = new AuthenticationHeaderValue("Bearer", token);
}
var response = await base.SendAsync(request, cancellationToken);

// Hvis tokenet udløber (401), send brugeren til login
if (response.StatusCode == HttpStatusCode.Unauthorized)
{
_navigationManager.NavigateTo("/login", true); // Omdiriger til login
}

return response;
}
API - Programm.cs

Code: Select all

var Issuer = builder.Configuration["JwtSettings:Issuer"];
var Audience = builder.Configuration["JwtSettings:Audience"];
var Token = builder.Configuration["JwtSettings:Token"];
builder.Services.AddAuthentication(JwtBearerDefaults.AuthenticationScheme)
.AddJwtBearer(options =>
{
options.TokenValidationParameters = new TokenValidationParameters
{
ValidateIssuer = true,
ValidIssuer = Issuer,
ValidateAudience = true,
ValidAudience = Audience,
IssuerSigningKey = new SymmetricSecurityKey(Encoding.UTF8.GetBytes(Token)),
ValidateIssuerSigningKey = true
};
});

builder.Services.AddAuthorization();
< /code>
Das [url=viewtopic.php?t=15738]Problem[/url] ist im Moment, dass ich nicht auf die Dashboard -Seite zugreifen kann, da es mir 401 gibt. Wenn ich auf meiner Skalar -API teste, indem ich das Token nehme und es sende, bekomme ich mit dem Token Zugriff auf die API. Die Frage ist also: Wie kann ich nicht auf die Seite zugreifen, auf der @Attribute [autorize] 
also bedeutet, dass ich nicht auf die Seiten zugreifen kann, die sie in irgendeiner Weise erfordern.>

Quick Reply

Change Text Case: 
   
  • Similar Topics
    Replies
    Views
    Last post