Skip to content

Commit 5d0cbe4

Browse files
committed
feature(csrf-token): add csrf token cookie
closes TrilonIO#48 > Cookie:_ga=GA1.1.776949977.1456326673; .AspNetCore.Antiforgery.UXO5fwPO0_I=CfDJ8MWQ4vQ8YoxPiafJLrfvOsudL0CCVXA8 _NntZcOKwN9DJUbwd7rSR3gLIurZ0wmrHfHQUwzpTQdDcHfDQbVP1wl2EXIuI2n--HwpW7L1 YblEK2qa4rU58-kkZ0EB5x9SnFP_wZJOPdSLicT5STl8fOg; XSRF-TOKEN=CfDJ8MWQ4vQ8YoxPiafJLrfvOss01F393ftQsOZ-XtJIgsaLOgv7_5arDVb_U P5zTN13u6bkwDvRieoXNGo6vEPgpSVqbpEVXaMRr2UlS_qM4h_LmQ-We6l5IRo1HzAeD5Qa0 KIBEB2TLgBKAYv-Uo2MQWc > Host:localhost:5000
1 parent 93d54b2 commit 5d0cbe4

File tree

4 files changed

+27
-3
lines changed

4 files changed

+27
-3
lines changed

Client/components/navmenu/navmenu.component.css

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@ li.link-active a:focus {
1212

1313
/* Keep the nav menu independent of scrolling and on top of other items */
1414
.nav { }
15+
.nav li { display:inline-block; }
1516
.nav li a { padding:10px 20px; }
1617
.nav li a:hover, .nav li a:focus { text-decoration: none; }
1718

Client/components/navmenu/navmenu.component.html

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
<ul class="nav navbar-inverse">
1+
<ul class="nav">
22
<li [routerLinkActive]="['link-active']">
33
<a [routerLink]="['/home']">
44
<i class="fa fa-home" aria-hidden="true"></i> Home

Startup.cs

Lines changed: 21 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,16 @@
11
using System;
22
using Microsoft.AspNetCore.Builder;
33
using Microsoft.AspNetCore.Hosting;
4+
using Microsoft.AspNetCore.Antiforgery;
5+
46
using Microsoft.AspNetCore.SpaServices.Webpack;
57
using Microsoft.Extensions.Configuration;
68
using Microsoft.Extensions.DependencyInjection;
79
using Microsoft.Extensions.Logging;
10+
using Microsoft.AspNetCore.Authentication.Cookies;
811
using Microsoft.EntityFrameworkCore;
912
using Angular2Spa.Models;
13+
using Microsoft.AspNetCore.Http;
1014

1115
namespace Angular2Spa
1216
{
@@ -47,6 +51,8 @@ public void ConfigureServices(IServiceCollection services)
4751
services.AddMvc();
4852
services.AddMemoryCache();
4953

54+
services.AddAntiforgery(options => options.HeaderName = "X-XSRF-TOKEN");
55+
5056
//Adding SignalR Service
5157
services.AddSignalR(options => {
5258
services.AddMemoryCache();
@@ -59,7 +65,7 @@ public void ConfigureServices(IServiceCollection services)
5965
}
6066

6167
// This method gets called by the runtime. Use this method to configure the HTTP request pipeline.
62-
public void Configure(IApplicationBuilder app, IHostingEnvironment env, ILoggerFactory loggerFactory)
68+
public void Configure(IApplicationBuilder app, IHostingEnvironment env, ILoggerFactory loggerFactory, IAntiforgery antiforgery)
6369
{
6470
loggerFactory.AddConsole(Configuration.GetSection("Logging"));
6571
loggerFactory.AddDebug();
@@ -86,6 +92,20 @@ public void Configure(IApplicationBuilder app, IHostingEnvironment env, ILoggerF
8692
app.UseExceptionHandler("/Home/Error");
8793
}
8894

95+
// CSRF / XSRF Token
96+
app.Use(async (context, next) =>
97+
{
98+
if (string.Equals(context.Request.Path.Value, "/", StringComparison.OrdinalIgnoreCase))
99+
{
100+
var tokens = antiforgery.GetAndStoreTokens(context);
101+
102+
context.Response.Cookies.Append("XSRF-TOKEN", tokens.RequestToken, new CookieOptions() {
103+
HttpOnly = false
104+
});
105+
}
106+
await next.Invoke();
107+
});
108+
89109
app.UseStaticFiles();
90110

91111
// ** MVC / WebAPI Routing & default SPA fallback Routing

project.json

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,11 +14,14 @@
1414
"Gray.Microsoft.AspNetCore.SignalR.Server": "0.2.0-alpha1",
1515
"Microsoft.ApplicationInsights.AspNetCore": "1.0.0",
1616
"Microsoft.AspNetCore.Diagnostics": "1.1.0",
17-
"Microsoft.AspNetCore.Mvc": "1.1.0",
17+
"Microsoft.AspNetCore.Mvc": "1.1.1",
1818
"Microsoft.AspNetCore.Razor.Tools": {
1919
"type": "build",
2020
"version": "1.0.0-preview2-final"
2121
},
22+
"Microsoft.AspNetCore.Cors": "1.1.0",
23+
"Microsoft.AspNetCore.Antiforgery": "1.1.0",
24+
"Microsoft.AspNetCore.Authentication.Cookies": "1.1.0",
2225
"Microsoft.AspNetCore.Server.IISIntegration": "1.1.0",
2326
"Microsoft.AspNetCore.Server.Kestrel": "1.1.0",
2427
"Microsoft.AspNetCore.SpaServices": "1.1.0-*",

0 commit comments

Comments
 (0)