Skip to content

Commit 22b4c66

Browse files
committed
fix antiforgery
1 parent 0b421f5 commit 22b4c66

File tree

4 files changed

+31
-24
lines changed

4 files changed

+31
-24
lines changed

API/Controllers/LoginController.cs

Lines changed: 19 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -28,28 +28,36 @@ public LoginController(IConfiguration config,
2828
public async Task<IActionResult> Get() {
2929
JwtSecurityToken jwtToken;
3030
string token;
31+
AuthResult authResult;
3132

32-
if (HttpContext.User.Identity.Name == "" || HttpContext.User.Identity.Name == null) {
33+
if (HttpContext.User.Identity!.Name == "" || HttpContext.User.Identity.Name == null) {
3334
throw new InvalidUserException();
3435
}
3536

3637
if (jwtUtil.ValidateToken(HttpContext.Request, out jwtToken, out token)) {
37-
return Ok(new AuthResult() {
38+
if (HttpContext.User.Identity.Name == jwtToken.Claims
39+
.Where(c => c.Type == ClaimTypes.Name)
40+
.Select(c => c.Value).SingleOrDefault()) {
41+
Array.ForEach(jwtToken.Claims.Where(c => c.Type == ClaimTypes.Role)
42+
.ToArray(), c => ((ClaimsIdentity)HttpContext.User.Identity).AddClaim(c));
43+
}
44+
authResult = new AuthResult() {
3845
Token = token,
3946
Success = true,
4047
RefreshToken = ""
41-
});
48+
};
49+
} else {
50+
List<Claim>? claims = _service.GetUserClaims(HttpContext.User.Identity.Name);
51+
52+
ClaimsIdentity claimsIdentity = (ClaimsIdentity)HttpContext.User.Identity;
53+
Array.ForEach(claims.Where(c => c.Type == ClaimTypes.Role).ToArray(),
54+
c => claimsIdentity.AddClaim(c));
55+
authResult = jwtUtil.GenerateJwtToken(HttpContext.User.Identity.Name, claims);
4256
}
4357

44-
List<Claim>? claims = _service.GetUserClaims(HttpContext.User.Identity.Name);
45-
46-
ClaimsIdentity claimsIdentity = (ClaimsIdentity)HttpContext.User.Identity;
47-
Array.ForEach(claims.Where(c => c.Type == ClaimTypes.Role).ToArray(),
48-
c => claimsIdentity.AddClaim(c));
49-
5058
AntiforgeryTokenSet? tokens = antiforgery.GetAndStoreTokens(HttpContext);
51-
HttpContext.Response.Cookies.Append("XSRF-TOKEN", tokens.RequestToken, new CookieOptions() { HttpOnly = false });
59+
HttpContext.Response.Cookies.Append("XSRF-TOKEN", tokens.RequestToken!, new CookieOptions() { HttpOnly = false });
5260

53-
return Ok(jwtUtil.GenerateJwtToken(HttpContext.User.Identity.Name, claims));
61+
return Ok(authResult);
5462
}
5563
}

API/Controllers/SystemParameters/SystemParametersController.cs

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@
77
namespace API {
88
[ApiController]
99
[Route("systemparameters")]
10+
[AutoValidateAntiforgeryToken]
1011
public class SystemParametersController : ControllerBase {
1112
private readonly SystemParametersService _service;
1213
private readonly ILogger<UserController> _logger;
@@ -27,7 +28,6 @@ public async Task<IActionResult> SearchAll([FromBody]SystemParametersSearchReque
2728
[HttpPost]
2829
[Route("addsystemparameter")]
2930
[AccessCodeAuthorize("SP02")]
30-
[ValidateAntiForgeryToken]
3131
public async Task<IActionResult> AddSystemParameter([FromBody]AddSystemParameterRequest request) {
3232
AddDataResponse response;
3333
request.Refresh(HttpContext.User.Identity.Name,DateTime.Now);
@@ -37,7 +37,6 @@ public async Task<IActionResult> AddSystemParameter([FromBody]AddSystemParameter
3737
[HttpPost]
3838
[Route("editsystemparameter")]
3939
[AccessCodeAuthorize("SP03")]
40-
[ValidateAntiForgeryToken]
4140
public async Task<IActionResult> EditSystemParameter([FromBody] EditSystemParameterRequest request) {
4241
EditDataResponse response;
4342
request.Refresh(HttpContext.User.Identity.Name, DateTime.Now);
@@ -47,7 +46,6 @@ public async Task<IActionResult> EditSystemParameter([FromBody] EditSystemParame
4746
[HttpGet]
4847
[Route("deletesystemparameter")]
4948
[AccessCodeAuthorize("SP04")]
50-
[ValidateAntiForgeryToken]
5149
public async Task<IActionResult> DeleteSystemParameter([FromQuery] DeleteSystemParameterRequest request) {
5250
EditDataResponse response;
5351
response = await _service.DeleteSystemParameterAsync(request);

API/Controllers/UserController.cs

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@
88
namespace API {
99
[ApiController]
1010
[Route("users")]
11+
[AutoValidateAntiforgeryToken]
1112
public class UserController : ControllerBase {
1213
private readonly UserService _service;
1314
private readonly ILogger<UserController> _logger;
@@ -40,7 +41,6 @@ public async Task<IActionResult> Get([FromBody] GetUserRequest request) {
4041

4142
[HttpPost(Name = "AddNewUser")]
4243
[AccessCodeAuthorize("AB01")]
43-
[ValidateAntiForgeryToken]
4444
public async Task<IActionResult> Add([FromBody] AddUserRequest request) {
4545
AddUserResponse response;
4646
request.Refresh(HttpContext.User.Identity.Name, DateTime.Now);
@@ -50,7 +50,6 @@ public async Task<IActionResult> Add([FromBody] AddUserRequest request) {
5050

5151
[HttpPost("Addpayslip")]
5252
[AccessCodeAuthorize("AC01")]
53-
[ValidateAntiForgeryToken]
5453
public async Task<IActionResult> AddPayslip([FromBody] AddPayslipRequest request) {
5554
AddPayslipResponse _response;
5655
request.Refresh(HttpContext.User.Identity.Name, DateTime.Now);

Client/wwwroot/index.html

Lines changed: 10 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -25,15 +25,17 @@
2525
</div>
2626
<script src="_framework/blazor.webassembly.js"></script>
2727
<script>
28-
function getCookie(cname) {
29-
var decodedCookie = decodeURIComponent(document.cookie);
30-
var ca = decodedCookie.split(';');
31-
for (var i = 0; i < ca.length; i++) {
32-
var arr = ca[i].split('=');
33-
if (arr[0] == cname)
34-
return arr[1]
28+
function getCookie(name) {
29+
if (!document.cookie) {
30+
return null;
3531
}
36-
return "";
32+
const xsrfCookies = document.cookie.split(';')
33+
.map(c => c.trim())
34+
.filter(c => c.startsWith(name + '='));
35+
if (xsrfCookies.length === 0) {
36+
return null;
37+
}
38+
return decodeURIComponent(xsrfCookies[0].split('=')[1]);
3739
}
3840
</script>
3941
<script src="_content/telerik.reportviewer.blazor/interop.js" defer></script>

0 commit comments

Comments
 (0)