示例#1
0
        protected override bool CheckAccessCore(OperationContext operationContext)
        {
            if (!base.CheckAccessCore(operationContext))
            {
                return(false);
            }

            var httpDetails = operationContext.RequestContext.RequestMessage.Properties[HttpRequestMessageProperty.Name] as HttpRequestMessageProperty;
            var requestUri  = operationContext.RequestContext.RequestMessage.Properties.Via;

            return(Task.Run(async delegate
            {
                ProtocolFaultResponseException exception = null;
                try
                {
                    var principal = await VerifyOAuth2Async(
                        httpDetails,
                        requestUri,
                        operationContext.IncomingMessageHeaders.Action ?? operationContext.IncomingMessageHeaders.To.AbsolutePath);
                    if (principal != null)
                    {
                        var policy = new OAuthPrincipalAuthorizationPolicy(principal);
                        var policies = new List <IAuthorizationPolicy> {
                            policy
                        };

                        var securityContext = new ServiceSecurityContext(policies.AsReadOnly());
                        if (operationContext.IncomingMessageProperties.Security != null)
                        {
                            operationContext.IncomingMessageProperties.Security.ServiceSecurityContext = securityContext;
                        }
                        else
                        {
                            operationContext.IncomingMessageProperties.Security = new SecurityMessageProperty
                            {
                                ServiceSecurityContext = securityContext,
                            };
                        }

                        securityContext.AuthorizationContext.Properties["Identities"] = new List <IIdentity> {
                            principal.Identity,
                        };

                        return true;
                    }
                    else
                    {
                        return false;
                    }
                }
                catch (ProtocolFaultResponseException ex)
                {
                    exception = ex;
                }
                catch (ProtocolException ex)
                {
                }

                if (exception != null)
                {
                    // Return the appropriate unauthorized response to the client.
                    var outgoingResponse = await exception.CreateErrorResponseAsync(CancellationToken.None);
                    if (WebOperationContext.Current != null)
                    {
                        this.Respond(WebOperationContext.Current.OutgoingResponse, outgoingResponse);
                    }
                }

                return false;
            }).GetAwaiter().GetResult());
        }
        protected override bool CheckAccessCore(OperationContext operationContext)
        {
            if (!base.CheckAccessCore(operationContext))
            {
                return false;
            }

            var httpDetails = operationContext.RequestContext.RequestMessage.Properties[HttpRequestMessageProperty.Name] as HttpRequestMessageProperty;
            var requestUri = operationContext.RequestContext.RequestMessage.Properties.Via;

            return Task.Run(async delegate
            {
                ProtocolFaultResponseException exception = null;
                try
                {
                    var principal = await VerifyOAuth2Async(
                        httpDetails,
                        requestUri,
                        operationContext.IncomingMessageHeaders.Action ?? operationContext.IncomingMessageHeaders.To.AbsolutePath);
                    if (principal != null)
                    {
                        var policy = new OAuthPrincipalAuthorizationPolicy(principal);
                        var policies = new List<IAuthorizationPolicy> { policy };

                        var securityContext = new ServiceSecurityContext(policies.AsReadOnly());
                        if (operationContext.IncomingMessageProperties.Security != null)
                        {
                            operationContext.IncomingMessageProperties.Security.ServiceSecurityContext = securityContext;
                        }
                        else
                        {
                            operationContext.IncomingMessageProperties.Security = new SecurityMessageProperty
                            {
                                ServiceSecurityContext = securityContext,
                            };
                        }

                        securityContext.AuthorizationContext.Properties["Identities"] = new List<IIdentity> { principal.Identity, };

                        return true;
                    }
                    else
                    {
                        return false;
                    }
                }
                catch (ProtocolFaultResponseException ex)
                {

                    exception = ex;
                }
                catch (ProtocolException ex)
                {

                }

                if (exception != null)
                {
                    
                    // Return the appropriate unauthorized response to the client.
                    var outgoingResponse = await exception.CreateErrorResponseAsync(CancellationToken.None);
                    if (WebOperationContext.Current != null)
                        this.Respond(WebOperationContext.Current.OutgoingResponse, outgoingResponse);
                }

                return false;
            }).GetAwaiter().GetResult();
        }