-
Notifications
You must be signed in to change notification settings - Fork 3
Expand file tree
/
Copy pathAuthenticationHandlerExtensions.cs
More file actions
56 lines (48 loc) · 2.28 KB
/
AuthenticationHandlerExtensions.cs
File metadata and controls
56 lines (48 loc) · 2.28 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
using System;
using ManagedCode.Orleans.Identity.Client.Middlewares;
using ManagedCode.Orleans.Identity.Core.Constants;
using ManagedCode.Orleans.Identity.Core.Options;
using Microsoft.AspNetCore.Authentication;
using Microsoft.AspNetCore.Authorization;
using Microsoft.Extensions.DependencyInjection;
namespace ManagedCode.Orleans.Identity.Client.Extensions;
public static class AuthenticationHandlerExtensions
{
/// <summary>
/// Use Orleans.Identity authentication as default authentication scheme
/// </summary>
/// <param name="services"></param>
/// <param name="sessionOption">Options for working with session</param>
public static void AddOrleansIdentity(this IServiceCollection services, Action<SessionOption> sessionOption)
{
var option = new SessionOption();
sessionOption?.Invoke(option);
AddOrleansIdentity(services, option);
}
/// <summary>
/// Use Orleans.Identity authentication as default authentication scheme
/// </summary>
/// <param name="services"></param>
/// <param name="sessionOption">Options for working with session</param>
/// <param name="authenticationBuilder"></param>
public static void AddOrleansIdentity(this IServiceCollection services, SessionOption? sessionOption = null, Action<AuthorizationPolicyBuilder>? authenticationBuilder = null)
{
sessionOption ??= new SessionOption();
// Add custom authentication and authorization
services.AddScoped<OrleansSessionAuthorizationHandler>();
services.AddScoped<OrleansSessionAuthenticationHandler>();
services.AddAuthentication(options =>
{
options.DefaultScheme = OrleansIdentityConstants.AUTHENTICATION_TYPE;
})
.AddScheme<AuthenticationSchemeOptions, OrleansSessionAuthenticationHandler>(OrleansIdentityConstants.AUTHENTICATION_TYPE, op =>
{
});
services.AddAuthorization(options =>
{
var defaultAuthorizationPolicyBuilder = new AuthorizationPolicyBuilder(OrleansIdentityConstants.AUTHENTICATION_TYPE);
defaultAuthorizationPolicyBuilder = defaultAuthorizationPolicyBuilder.RequireAuthenticatedUser();
options.DefaultPolicy = defaultAuthorizationPolicyBuilder.Build();
});
}
}