Skip to content
This repository was archived by the owner on Jan 23, 2020. It is now read-only.

Commit 8c5262e

Browse files
committed
Pulling Auth into Startup.Auth.cs
1 parent e7eee71 commit 8c5262e

File tree

4 files changed

+85
-52
lines changed

4 files changed

+85
-52
lines changed
Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
using Microsoft.AspNet.Builder;
2+
using System;
3+
4+
namespace TodoListService
5+
{
6+
public partial class Startup
7+
{
8+
public void ConfigureAuth(IApplicationBuilder app)
9+
{
10+
// Configure the app to use OAuth Bearer Authentication
11+
app.UseOAuthBearerAuthentication(options =>
12+
{
13+
options.Audience = Configuration.Get("AzureAd:Audience");
14+
options.Authority = String.Format(Configuration.Get("AzureAd:AadInstance"), Configuration.Get("AzureAd:Tenant"));
15+
});
16+
}
17+
}
18+
}

TodoListService/Startup.cs

Lines changed: 2 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@
1313

1414
namespace TodoListService
1515
{
16-
public class Startup
16+
public partial class Startup
1717
{
1818
public Startup(IHostingEnvironment env)
1919
{
@@ -34,12 +34,7 @@ public void ConfigureServices(IServiceCollection services)
3434
// Configure is called after ConfigureServices is called.
3535
public void Configure(IApplicationBuilder app, IHostingEnvironment env)
3636
{
37-
// Configure the app to use OAuth Bearer Authentication
38-
app.UseOAuthBearerAuthentication(options =>
39-
{
40-
options.Audience = Configuration.Get("AzureAd:Audience");
41-
options.Authority = String.Format(Configuration.Get("AzureAd:AadInstance"), Configuration.Get("AzureAd:Tenant"));
42-
});
37+
ConfigureAuth(app);
4338

4439
app.UseStaticFiles();
4540
// Add MVC to the request pipeline.
Lines changed: 59 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,59 @@
1+
using Microsoft.AspNet.Builder;
2+
using Microsoft.AspNet.Security;
3+
using Microsoft.AspNet.Security.Cookies;
4+
using Microsoft.AspNet.Security.Notifications;
5+
using Microsoft.AspNet.Security.OpenIdConnect;
6+
using Microsoft.Framework.DependencyInjection;
7+
using Microsoft.IdentityModel.Clients.ActiveDirectory;
8+
using System;
9+
using System.Threading.Tasks;
10+
using TodoListWebApp.Utils;
11+
12+
namespace TodoListWebApp
13+
{
14+
public partial class Startup
15+
{
16+
public static string Authority = String.Empty;
17+
public static string ClientId = String.Empty;
18+
public static string AppKey = String.Empty;
19+
public static string TodoListResourceId = String.Empty;
20+
public static string TodoListBaseAddress = String.Empty;
21+
22+
public void ConfigureAuth(IApplicationBuilder app)
23+
{
24+
// Populate AzureAd Configuration Values
25+
Authority = String.Format(Configuration.Get("AzureAd:AadInstance"), Configuration.Get("AzureAd:Tenant"));
26+
ClientId = Configuration.Get("AzureAd:ClientId");
27+
AppKey = Configuration.Get("AzureAd:AppKey");
28+
TodoListResourceId = Configuration.Get("AzureAd:TodoListResourceId");
29+
TodoListBaseAddress = Configuration.Get("AzureAd:TodoListBaseAddress");
30+
31+
// Configure the Session Middleware, Used for Storing Tokens
32+
app.UseSession();
33+
34+
// Configure OpenId Connect Authentication Middleware
35+
app.UseCookieAuthentication(options => { });
36+
app.UseOpenIdConnectAuthentication(options =>
37+
{
38+
options.ClientId = Configuration.Get("AzureAd:ClientId");
39+
options.Authority = Authority;
40+
options.PostLogoutRedirectUri = Configuration.Get("AzureAd:PostLogoutRedirectUri");
41+
options.Notifications = new OpenIdConnectAuthenticationNotifications
42+
{
43+
AuthorizationCodeReceived = OnAuthorizationCodeReceived
44+
};
45+
});
46+
}
47+
48+
public async Task OnAuthorizationCodeReceived(AuthorizationCodeReceivedNotification notification)
49+
{
50+
// Acquire a Token for the TodoList Web API, and Cache it For Later Use
51+
string userObjectId = notification.AuthenticationTicket.Principal.FindFirst("http://schemas.microsoft.com/identity/claims/objectidentifier").Value;
52+
ClientCredential clientCred = new ClientCredential(ClientId, AppKey);
53+
AuthenticationContext authContext = new AuthenticationContext(Authority, new NaiveSessionCache(userObjectId, notification.HttpContext.Session));
54+
AuthenticationResult authResult = await authContext.AcquireTokenByAuthorizationCodeAsync(
55+
notification.Code, new Uri(notification.RedirectUri), clientCred, Startup.TodoListResourceId);
56+
57+
}
58+
}
59+
}

TodoListWebApp/Startup.cs

Lines changed: 6 additions & 45 deletions
Original file line numberDiff line numberDiff line change
@@ -21,26 +21,14 @@
2121

2222
namespace TodoListWebApp
2323
{
24-
public class Startup
24+
public partial class Startup
2525
{
26-
public static string Authority = String.Empty;
27-
public static string ClientId = String.Empty;
28-
public static string AppKey = String.Empty;
29-
public static string TodoListResourceId = String.Empty;
30-
public static string TodoListBaseAddress = String.Empty;
31-
3226
public Startup(IHostingEnvironment env)
3327
{
3428
// Setup configuration sources.
3529
Configuration = new Configuration()
3630
.AddJsonFile("config.json")
3731
.AddEnvironmentVariables();
38-
39-
Authority = String.Format(Configuration.Get("AzureAd:AadInstance"), Configuration.Get("AzureAd:Tenant"));
40-
ClientId = Configuration.Get("AzureAd:ClientId");
41-
AppKey = Configuration.Get("AzureAd:AppKey");
42-
TodoListResourceId = Configuration.Get("AzureAd:TodoListResourceId");
43-
TodoListBaseAddress = Configuration.Get("AzureAd:TodoListBaseAddress");
4432
}
4533

4634
public IConfiguration Configuration { get; set; }
@@ -50,14 +38,16 @@ public void ConfigureServices(IServiceCollection services)
5038
{
5139
// Add MVC services to the services container.
5240
services.AddMvc();
41+
42+
// Add Session Middleware
5343
services.AddCachingServices();
5444
services.AddSessionServices();
5545

46+
// Add Cookie Middleware
5647
services.Configure<ExternalAuthenticationOptions>(options =>
5748
{
5849
options.SignInAsAuthenticationType = CookieAuthenticationDefaults.AuthenticationType;
5950
});
60-
6151
}
6252

6353
// Configure is called after ConfigureServices is called.
@@ -67,7 +57,6 @@ public void Configure(IApplicationBuilder app, IHostingEnvironment env, ILoggerF
6757
// Add the console logger.
6858
loggerfactory.AddConsole();
6959

70-
7160
// Add the following to the request pipeline only in development environment.
7261
if (string.Equals(env.EnvironmentName, "Development", StringComparison.OrdinalIgnoreCase))
7362
{
@@ -81,26 +70,8 @@ public void Configure(IApplicationBuilder app, IHostingEnvironment env, ILoggerF
8170
app.UseErrorHandler("/Home/Error");
8271
}
8372

84-
// Add static files to the request pipeline.
85-
app.UseStaticFiles();
86-
87-
// Configure the app with session middleware, which we will use to store tokens.
88-
app.UseSession();
89-
90-
// Configure the OWIN Pipeline to use OpenID Connect Authentication
91-
app.UseCookieAuthentication(options => { });
92-
93-
app.UseOpenIdConnectAuthentication(options =>
94-
{
95-
options.ClientId = Configuration.Get("AzureAd:ClientId");
96-
options.Authority = Authority;
97-
options.PostLogoutRedirectUri = Configuration.Get("AzureAd:PostLogoutRedirectUri");
98-
options.RedirectUri = Configuration.Get("AzureAd:PostLogoutRedirectUri");
99-
options.Notifications = new OpenIdConnectAuthenticationNotifications
100-
{
101-
AuthorizationCodeReceived = OnAuthorizationCodeReceived
102-
};
103-
});
73+
// Configure the OpenIdConnect Auth Pipeline and required services.
74+
ConfigureAuth(app);
10475

10576
// Add MVC to the request pipeline.
10677
app.UseMvc(routes =>
@@ -114,15 +85,5 @@ public void Configure(IApplicationBuilder app, IHostingEnvironment env, ILoggerF
11485
// routes.MapWebApiRoute("DefaultApi", "api/{controller}/{id?}");
11586
});
11687
}
117-
118-
public async Task OnAuthorizationCodeReceived(AuthorizationCodeReceivedNotification notification)
119-
{
120-
string userObjectId = notification.AuthenticationTicket.Principal.FindFirst("http://schemas.microsoft.com/identity/claims/objectidentifier").Value;
121-
ClientCredential clientCred = new ClientCredential(ClientId, AppKey);
122-
AuthenticationContext authContext = new AuthenticationContext(Authority, new NaiveSessionCache(userObjectId, notification.HttpContext.Session));
123-
AuthenticationResult authResult = await authContext.AcquireTokenByAuthorizationCodeAsync(
124-
notification.Code, new Uri(notification.RedirectUri), clientCred, Startup.TodoListResourceId);
125-
126-
}
12788
}
12889
}

0 commit comments

Comments
 (0)