Skip to content
This repository was archived by the owner on Sep 26, 2023. It is now read-only.

Commit 4550efa

Browse files
committed
WebAPI: Move SetupRedirectUri to DI
1 parent ad9b8ad commit 4550efa

File tree

6 files changed

+21
-12
lines changed

6 files changed

+21
-12
lines changed

ASPNET_WebAPI/Controllers/AuthController.cs

-1
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,6 @@ public async Task<IActionResult> SigninOIDCAsync(string code, string state, stri
3333
throw new Exception(error);
3434
}
3535

36-
_oidcService.SetupRedirectUri(Request, "api/Auth/oidc/signin");
3736
string idToken = await _oidcService.GetIdTokenAsync(code);
3837

3938
return Redirect($"{_config["FrontEndUri"]}?idToken={idToken}");

ASPNET_WebAPI/Program.cs

+4-1
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
using GoogleOIDC_Angular_ASPNETWebAPI_Auth_Code_Flow.Services;
2+
using Microsoft.AspNetCore.Http.Extensions;
23

34
var builder = WebApplication.CreateBuilder(args);
45

@@ -8,7 +9,9 @@
89
// Learn more about configuring Swagger/OpenAPI at https://aka.ms/aspnetcore/swashbuckle
910
builder.Services.AddEndpointsApiExplorer();
1011
builder.Services.AddSwaggerGen();
11-
builder.Services.AddScoped<OIDCService>();
12+
builder.Services.AddHttpContextAccessor();
13+
builder.Services.AddScoped(x
14+
=> ActivatorUtilities.CreateInstance<OIDCService>(x, x.GetRequiredService<IHttpContextAccessor>().HttpContext?.Request.GetDisplayUrl() ?? ""));
1215
builder.Services.AddHttpClient();
1316

1417
var app = builder.Build();

ASPNET_WebAPI/Services/OIDCService.cs

+13-7
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,6 @@
11
using Google.Apis.Auth.OAuth2;
22
using Google.Apis.Auth.OAuth2.Requests;
33
using Google.Apis.Auth.OAuth2.Responses;
4-
using Microsoft.AspNetCore.Http.Extensions;
54

65
namespace GoogleOIDC_Angular_ASPNETWebAPI_Auth_Code_Flow.Services;
76

@@ -10,17 +9,24 @@ public class OIDCService
109
private readonly IHttpClientFactory _httpClientFactory;
1110
private readonly IConfiguration _config;
1211

13-
private string RedirectUri { get; set; } = "http://localhost:7091/Auth/oidc/signin";
12+
private string RedirectUri { get; set; } = "http://localhost:7091/api/Auth/oidc/signin";
1413
private string ClientId { get; }
1514
private string ClientSecret { get; }
1615

17-
public OIDCService(IHttpClientFactory httpClientFactory, IConfiguration config)
16+
public OIDCService(IHttpClientFactory httpClientFactory,
17+
IConfiguration config,
18+
string requestUrl)
1819
{
1920
_httpClientFactory = httpClientFactory;
2021
_config = config;
2122

23+
if (!string.IsNullOrEmpty(requestUrl))
24+
SetupRedirectUri(requestUrl);
25+
2226
// Read redirectUri from configuration if it exists.
23-
RedirectUri = config["Authentication:Google:RedirectUri"] ?? RedirectUri;
27+
RedirectUri = !string.IsNullOrEmpty(_config["Authentication:Google:RedirectUri"])
28+
? _config["Authentication:Google:RedirectUri"]
29+
: RedirectUri;
2430
ClientId = _config["Authentication:Google:ClientId"];
2531
ClientSecret = _config["Authentication:Google:ClientSecret"];
2632
}
@@ -52,13 +58,13 @@ public async Task<string> GetIdTokenAsync(string authorization_code)
5258

5359
#region Additional Feature
5460
/// <summary>
55-
/// 由Request動態取得request URL,以產生並覆寫RedirectUri。在一進入Action時呼叫。
61+
/// 動態取得request URL,以產生並覆寫RedirectUri
5662
/// </summary>
5763
/// <param name="request"></param>
5864
/// <param name="route"></param>
59-
internal void SetupRedirectUri(HttpRequest request, string route)
65+
internal void SetupRedirectUri(string requestUrl, string? route = "api/Auth/oidc/signin")
6066
{
61-
Uri uri = new(request.GetDisplayUrl());
67+
Uri uri = new(requestUrl);
6268
string port = uri.Scheme == "https" && uri.Port == 443
6369
|| uri.Scheme == "http" && uri.Port == 80
6470
? ""

ASPNET_WebAPI/appsettings.json

+2-1
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,8 @@
99
"Authentication": {
1010
"Google": {
1111
"ClientId": "YOUR CLIENT ID",
12-
"ClientSecret": "YOUR CLIENT SECRET"
12+
"ClientSecret": "YOUR CLIENT SECRET",
13+
"RedirectUri": ""
1314
}
1415
},
1516
"FrontEndUri": "http://localhost:4200"

Angular/src/app/authentication.service.ts

+1-1
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@ export class AuthenticationService {
1616
client_id: environment.clientId,
1717
scope: 'openid profile email',
1818
ux_mode: 'redirect',
19-
redirect_uri: environment.apiUrl + '/Auth/oidc/signin',
19+
redirect_uri: environment.apiUrl + '/api/Auth/oidc/signin',
2020
state: '12345GG',
2121
});
2222
client.requestCode();

Angular/src/environments/environment.ts

+1-1
Original file line numberDiff line numberDiff line change
@@ -4,8 +4,8 @@
44

55
export const environment = {
66
production: false,
7-
apiUrl: 'https://localhost:7091/api',
87
clientId: 'YOUR CLIENT ID',
8+
apiUrl: 'https://localhost:7091',
99
};
1010

1111
/*

0 commit comments

Comments
 (0)