Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
5 changes: 3 additions & 2 deletions samples/Balosar/Balosar.Client/Pages/FetchData.razor
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@
@using Microsoft.AspNetCore.Authorization
@using Microsoft.AspNetCore.Components.WebAssembly.Authentication
@attribute [Authorize]
@inject HttpClient Http
@inject HttpClient HttpClient

<h1>Weather forecast</h1>

Expand Down Expand Up @@ -44,8 +44,9 @@ else
{
try
{
forecasts = (await Http.GetFromJsonAsync<WeatherForecast[]>("WeatherForecast"))!;
forecasts = (await HttpClient.GetFromJsonAsync<WeatherForecast[]>("WeatherForecast"))!;
}

catch (AccessTokenNotAvailableException exception)
{
exception.Redirect();
Expand Down
4 changes: 2 additions & 2 deletions samples/Balosar/Balosar.Client/Shared/LoginDisplay.razor
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
@using Microsoft.AspNetCore.Components.Authorization
@using Microsoft.AspNetCore.Components.WebAssembly.Authentication

@inject NavigationManager Navigation
@inject NavigationManager NavigationManager

<AuthorizeView>
<Authorized>
Expand All @@ -17,6 +17,6 @@
@code{
private void BeginSignOut(MouseEventArgs args)
{
Navigation.NavigateToLogout("authentication/logout");
NavigationManager.NavigateToLogout("authentication/logout");
}
}
5 changes: 3 additions & 2 deletions samples/Balosar/Balosar.Client/Shared/RedirectToLogin.razor
Original file line number Diff line number Diff line change
@@ -1,8 +1,9 @@
@inject NavigationManager Navigation
@inject NavigationManager NavigationManager
@using Microsoft.AspNetCore.Components.WebAssembly.Authentication

@code {
protected override void OnInitialized()
{
Navigation.NavigateTo($"authentication/login?returnUrl={Uri.EscapeDataString(Navigation.Uri)}");
NavigationManager.NavigateTo($"authentication/login?returnUrl={Uri.EscapeDataString(NavigationManager.Uri)}");
}
}
Original file line number Diff line number Diff line change
@@ -1,9 +1,9 @@
@page "/downstream-api"
@using System.Net
@inject HttpClient client
@inject NavigationManager manager
@inject AuthenticationStateProvider provider
@inject IJSRuntime runtime
@inject AuthenticationStateProvider AuthenticationStateProvider
@inject HttpClient HttpClient
@inject NavigationManager NavigationManager
@inject IJSRuntime JSRuntime

<h1>Data retrieved from downstream API via YARP</h1>

Expand Down Expand Up @@ -35,23 +35,23 @@ else

protected override async Task OnInitializedAsync()
{
var state = await provider.GetAuthenticationStateAsync();
var state = await AuthenticationStateProvider.GetAuthenticationStateAsync();
if (state is not { User.Identity.IsAuthenticated: true })
{
manager.NavigateTo($"login?returnUrl=/{Uri.EscapeDataString(manager.ToBaseRelativePath(manager.Uri))}", true);
NavigationManager.NavigateTo($"login?returnUrl={Uri.EscapeDataString("/" + NavigationManager.ToBaseRelativePath(NavigationManager.Uri))}", true);
return;
}

client.DefaultRequestHeaders.Add("X-XSRF-TOKEN", await runtime.InvokeAsync<string>("getAntiForgeryToken"));
HttpClient.DefaultRequestHeaders.Add("X-XSRF-TOKEN", await JSRuntime.InvokeAsync<string>("getAntiForgeryToken"));

try
{
data = (await client.GetFromJsonAsync<string[]>("api/downstream-api"))!;
data = (await HttpClient.GetFromJsonAsync<string[]>("api/downstream-api"))!;
}

catch (HttpRequestException exception) when (exception.StatusCode is HttpStatusCode.Unauthorized)
{
manager.NavigateTo($"login?returnUrl=/{Uri.EscapeDataString(manager.ToBaseRelativePath(manager.Uri))}", true);
NavigationManager.NavigateTo($"login?returnUrl={Uri.EscapeDataString("/" + NavigationManager.ToBaseRelativePath(NavigationManager.Uri))}", true);
return;
}
}
Expand Down
Original file line number Diff line number Diff line change
@@ -1,9 +1,9 @@
@page "/local-api"
@using System.Net
@inject HttpClient client
@inject NavigationManager manager
@inject AuthenticationStateProvider provider
@inject IJSRuntime runtime
@inject AuthenticationStateProvider AuthenticationStateProvider
@inject HttpClient HttpClient
@inject NavigationManager NavigationManager
@inject IJSRuntime JSRuntime

<h1>Data from local API</h1>

Expand Down Expand Up @@ -35,23 +35,23 @@ else

protected override async Task OnInitializedAsync()
{
var state = await provider.GetAuthenticationStateAsync();
var state = await AuthenticationStateProvider.GetAuthenticationStateAsync();
if (state is not { User.Identity.IsAuthenticated: true })
{
manager.NavigateTo($"login?returnUrl=/{Uri.EscapeDataString(manager.ToBaseRelativePath(manager.Uri))}", true);
NavigationManager.NavigateTo($"login?returnUrl={Uri.EscapeDataString("/" + NavigationManager.ToBaseRelativePath(NavigationManager.Uri))}", true);
return;
}

client.DefaultRequestHeaders.Add("X-XSRF-TOKEN", await runtime.InvokeAsync<string>("getAntiForgeryToken"));
HttpClient.DefaultRequestHeaders.Add("X-XSRF-TOKEN", await JSRuntime.InvokeAsync<string>("getAntiForgeryToken"));

try
{
data = (await client.GetFromJsonAsync<string[]>("api/local-api"))!;
data = (await HttpClient.GetFromJsonAsync<string[]>("api/local-api"))!;
}

catch (HttpRequestException exception) when (exception.StatusCode is HttpStatusCode.Unauthorized)
{
manager.NavigateTo($"login?returnUrl=/{Uri.EscapeDataString(manager.ToBaseRelativePath(manager.Uri))}", true);
NavigationManager.NavigateTo($"login?returnUrl={Uri.EscapeDataString("/" + NavigationManager.ToBaseRelativePath(NavigationManager.Uri))}", true);
return;
}
}
Expand Down
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
@using Microsoft.AspNetCore.Components.Authorization
@using Microsoft.AspNetCore.Components.WebAssembly.Authentication

@inject NavigationManager Navigation
@inject NavigationManager NavigationManager

<AuthorizeView>
<Authorized>
Expand All @@ -16,6 +16,6 @@
@code{
private void BeginLogout(MouseEventArgs args)
{
Navigation.NavigateToLogout("authentication/logout");
NavigationManager.NavigateToLogout("authentication/logout");
}
}
43 changes: 20 additions & 23 deletions samples/Geonosis/Geonosis.Api/Program.cs
Original file line number Diff line number Diff line change
@@ -1,9 +1,6 @@
using OpenIddict.Abstractions;
using OpenIddict.Validation.AspNetCore;

var issuerUrl = "https://localhost:7094";
var weatherReadAuthPolicy = "Weather.Read";

var builder = WebApplication.CreateBuilder(args);

builder.AddServiceDefaults();
Expand All @@ -13,7 +10,7 @@
.AddValidation(options =>
{
// Set the authority and the audience to validate the tokens.
options.SetIssuer(issuerUrl);
options.SetIssuer("https://localhost:7094/");
options.AddAudiences("geonosis-api");

// Register the System.Net.Http integration.
Expand All @@ -29,7 +26,7 @@

// Add a policy that requires the "Weather.Read" scope.
builder.Services.AddAuthorizationBuilder()
.AddPolicy(weatherReadAuthPolicy, policy => policy
.AddPolicy("Weather.Read", policy => policy
.RequireAuthenticatedUser()
.RequireAssertion(context => context.User.HasScope("Weather.Read")));

Expand All @@ -44,24 +41,24 @@

// A sample endpoint that requires the "Weather.Read" scope to be accessed.
app.MapGet("/weather-forecast", () =>
{
string[] summaries =
[
"Freezing", "Bracing", "Chilly", "Cool", "Mild", "Warm", "Balmy", "Hot", "Sweltering", "Scorching"
];

var forecast = Enumerable.Range(1, 5).Select(index =>
new WeatherForecast
(
DateOnly.FromDateTime(DateTime.Now.AddDays(index)),
Random.Shared.Next(-20, 55),
summaries[Random.Shared.Next(summaries.Length)]
))
.ToArray();

return forecast;
})
.RequireAuthorization(weatherReadAuthPolicy);
{
string[] summaries =
[
"Freezing", "Bracing", "Chilly", "Cool", "Mild", "Warm", "Balmy", "Hot", "Sweltering", "Scorching"
];

var forecast = Enumerable.Range(1, 5).Select(index =>
new WeatherForecast
(
DateOnly.FromDateTime(DateTime.Now.AddDays(index)),
Random.Shared.Next(-20, 55),
summaries[Random.Shared.Next(summaries.Length)]
))
.ToArray();

return forecast;
})
.RequireAuthorization("Weather.Read");

app.Run();

Expand Down
13 changes: 7 additions & 6 deletions samples/Geonosis/Geonosis.AppHost/AppHost.cs
Original file line number Diff line number Diff line change
@@ -1,12 +1,13 @@
var builder = DistributedApplication.CreateBuilder(args);

var geonosisAuth = builder.AddProject<Projects.Geonosis_Auth>("geonosis-auth");
var server = builder.AddProject<Projects.Geonosis_Auth>("geonosis-auth");

var geonosisApi = builder.AddProject<Projects.Geonosis_Api>("geonosis-api")
.WaitFor(geonosisAuth);
var resource = builder.AddProject<Projects.Geonosis_Api>("geonosis-api")
.WaitFor(server);

builder.AddProject<Projects.Geonosis_Ui>("geonosis-ui")
.WaitFor(geonosisAuth)
.WaitFor(geonosisApi);
.WaitFor(server)
.WaitFor(resource);

builder.Build().Run();
var app = builder.Build();
await app.RunAsync();
4 changes: 1 addition & 3 deletions samples/Geonosis/Geonosis.Auth/Program.cs
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,7 @@
builder.Services.AddDbContext<ApplicationDbContext>(options =>
{
// Configure the context to use sqlite.
options.UseSqlite($"Filename={Path.Combine(Path.GetTempPath(), "geonosis-auth.sqlite3")}");
options.UseSqlite($"Filename={Path.Combine(Path.GetTempPath(), "openiddict-geonosis-auth.sqlite3")}");

// Register the entity sets needed by OpenIddict.
// Note: use the generic overload if you need
Expand Down Expand Up @@ -222,8 +222,6 @@ static async Task SeedClientsAsync(IServiceProvider provider)
"""))
}
},
// RedirectUris must match the URLs used by the Blazor Web application during the authentication process
// These URLs are where the authorization server will redirect the user after login/logout back to the client application
RedirectUris =
{
new Uri("http://localhost:5027/authentication/login-callback/local"),
Expand Down
8 changes: 0 additions & 8 deletions samples/Geonosis/Geonosis.Ui/Geonosis.Ui.Client/Constants.cs

This file was deleted.

Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
@inject NavigationManager Navigation
@inject NavigationManager NavigationManager

@inherits LayoutComponentBase

Expand All @@ -14,7 +14,7 @@
<AuthorizeView>
<Authorized Context="authContext">
<a class="me-3" href="/user-claims">@(authContext.User.Identity!.Name)</a>
<form action="@Constants.LogoutPath" method="post">
<form action="/authentication/logout" method="post">
<AntiforgeryToken />
<input type="hidden" name="ReturnUrl" value="@currentUrl" />
<button type="submit" class="nav-link">
Expand All @@ -23,7 +23,7 @@
</form>
</Authorized>
<NotAuthorized>
<a class="nav-link" href="@Constants.LoginPath">
<a class="nav-link" href="/authentication/login">
<span class="bi bi-person-badge-nav-menu" aria-hidden="true"></span> Login
</a>
</NotAuthorized>
Expand All @@ -48,18 +48,18 @@

protected override void OnInitialized()
{
currentUrl = "/" + Navigation.ToBaseRelativePath(Navigation.Uri);
Navigation.LocationChanged += OnLocationChanged;
currentUrl = "/" + NavigationManager.ToBaseRelativePath(NavigationManager.Uri);
NavigationManager.LocationChanged += OnLocationChanged;
}

private void OnLocationChanged(object? sender, LocationChangedEventArgs e)
{
currentUrl = "/" + Navigation.ToBaseRelativePath(e.Location);
currentUrl = "/" + NavigationManager.ToBaseRelativePath(e.Location);
StateHasChanged();
}

public void Dispose()
{
Navigation.LocationChanged -= OnLocationChanged;
NavigationManager.LocationChanged -= OnLocationChanged;
}
}
6 changes: 3 additions & 3 deletions samples/Geonosis/Geonosis.Ui/Geonosis.Ui.Client/Program.cs
Original file line number Diff line number Diff line change
Expand Up @@ -7,11 +7,11 @@
builder.Services.AddCascadingAuthenticationState();
builder.Services.AddAuthenticationStateDeserialization();

builder.Services.AddHttpClient<IWeatherForecaster, ClientWeatherForecaster>(httpClient =>
builder.Services.AddHttpClient<IWeatherForecaster, ClientWeatherForecaster>(client =>
{
httpClient.BaseAddress = new Uri(builder.HostEnvironment.BaseAddress);
client.BaseAddress = new Uri(builder.HostEnvironment.BaseAddress);
});

var app = builder.Build();

await app.RunAsync();
await app.RunAsync();
Original file line number Diff line number Diff line change
Expand Up @@ -2,8 +2,6 @@

@code
{
protected override void OnInitialized()
{
NavigationManager.NavigateTo($"{Constants.LoginPath}?returnUrl={Uri.EscapeDataString(NavigationManager.Uri)}", forceLoad: true);
}
protected override void OnInitialized() => NavigationManager.NavigateTo(
$"/authentication/login?returnUrl={Uri.EscapeDataString("/" + NavigationManager.ToBaseRelativePath(NavigationManager.Uri))}", forceLoad: true);
}
Loading
Loading