/// <summary>
        /// Invoke
        /// </summary>
        /// <param name="context">The context.</param>
        /// <param name="client">The client.</param>
        /// <returns></returns>
        public async Task Invoke(HttpContext context, IPolicyServerClient client)
        {
            if (context.User.Identity.IsAuthenticated)
            {
                var policy = await client.EvaluateAsync(context.User);

                var roleClaims       = policy.Roles.Select(x => new Claim("role", x));
                var permissionClaims = policy.Permissions.Select(x => new Claim("permission", x));

                var id = new ClaimsIdentity("PolicyServerMiddleware", "name", "role");
                id.AddClaims(roleClaims);
                id.AddClaims(permissionClaims);

                context.User.AddIdentity(id);
            }

            await _next(context);
        }
Beispiel #2
0
        public async Task <object> WhoAmI()
        {
            // get roles and permission for current user
            var result = await _client.EvaluateAsync(User);

            var roles       = result.Roles;
            var permissions = result.Permissions;

            return(new {
                Username = User.Identity.Name,
                IdentityRoles = User.Claims.Where(c => c.Type == "role").Select(c => c.Value),
                PolicyRoles = roles,
                Permissions = permissions,
                Claims = User.Claims.Select(c =>
                                            new {
                    type = c.Type,
                    value = c.Value
                })
            });
        }
Beispiel #3
0
        public async Task <IActionResult> Secure()
        {
            var result = await _client.EvaluateAsync(User);

            return(View(result));
        }