コード例 #1
0
        public override async Task <bool> ValidateAndBuildUser(ClaimsPrincipal principal)
        {
            var httpClientFactory = new AddHeaderHttpClientFactory <HalEndpointClient>("bearer", () =>
            {
                return(principal.GetAccessToken());
            }, new DefaultHttpClientFactory());

            var  claimsId = principal.Identity as ClaimsIdentity;
            bool valid    = false;

            try
            {
                var entryPoints = await HalEndpointClient.Load(new HalLink(entryPoint), httpClientFactory);

                if (entryPoints.HasLink("listClients"))
                {
                    valid = true;
                    claimsId.AddClaim(new Claim(claimsId.RoleClaimType, Roles.EditClients));
                }
                if (entryPoints.HasLink("listApiResource"))
                {
                    valid = true;
                    claimsId.AddClaim(new Claim(claimsId.RoleClaimType, Roles.EditApiResources));
                }
                if (entryPoints.HasLink("SetUser"))
                {
                    valid = true;
                    claimsId.AddClaim(new Claim(claimsId.RoleClaimType, AuthorizationAdminRoles.EditRoles));
                }

                if (!valid)
                {
                    var cookieAuthLog = loggerFactory.CreateLogger("CookieAuthentication");
                    cookieAuthLog.LogError($"Cannot login user {principal.GetUserLogString()}, they do not have a listClients or listApiResources claim");
                }
            }
            catch (Exception ex)
            {
                var cookieAuthLog = loggerFactory.CreateLogger("CookieAuthentication");
                cookieAuthLog.LogError($"Cannot login user {principal.GetUserLogString()}, a {ex.GetType()} with message {ex.Message} was thrown while contacting {entryPoint}.");
                valid = false;
            }

            return(await this.ChainNext(valid, principal));
        }
コード例 #2
0
 public OutputCollectionResult(HalEndpointClient client)
 {
     this.client = client;
 }
コード例 #3
0
 public Task <HalEndpointClient> Load(HalLink link)
 {
     return(HalEndpointClient.Load(link, this.httpClientFactory));
 }
コード例 #4
0
 public OutputResult(HalEndpointClient client)
 {
     this.client = client;
 }
コード例 #5
0
 public AppCommandCollectionResult(HalEndpointClient client)
 {
     this.client = client;
 }
コード例 #6
0
 public UserCollectionResult(HalEndpointClient client)
 {
     this.client = client;
 }
コード例 #7
0
 public ValueResult(HalEndpointClient client)
 {
     this.client = client;
 }
コード例 #8
0
 public EntryPointResult(HalEndpointClient client)
 {
     this.client = client;
 }
コード例 #9
0
        public static async Task <EntryPointResult> Load(string url, IHttpClientFactory fetcher)
        {
            var result = await HalEndpointClient.Load(new HalLink(url, "GET"), fetcher);

            return(new EntryPointResult(result));
        }
コード例 #10
0
 public RoleAssignmentsResult(HalEndpointClient client)
 {
     this.client = client;
 }
コード例 #11
0
 public AppCommandResult(HalEndpointClient client)
 {
     this.client = client;
 }