public void WhenAllowAnonymousAttributeAppliedToTheGrainMethodAuthorizationShouldBeSkipped()
        {
            var grainCallContext = Substitute.For <IGrainCallContext>();
            var methodInfo       = Substitute.For <MethodInfo>();

            grainCallContext.InterfaceMethod.Returns(methodInfo);

            grainCallContext.InterfaceMethod
            .GetCustomAttributes <AllowAnonymousAttribute>()
            .Returns(new[] { new AllowAnonymousAttribute() });

            Assert.False(AuthorizationAdmission.IsRequired(grainCallContext));
        }
Пример #2
0
        public async Task Invoke(IOutgoingGrainCallContext context)
        {
            if (AuthorizationAdmission.IsRequired(context))
            {
                await AuthorizeAsync(context);

                var grainType = context.Grain.GetType();
                Log(LoggingEvents.OutgoingGrainCallAuthorizationPassed,
                    grainType.Name, context.InterfaceMethod.Name);
            }

            await context.Invoke();
        }
        public async Task Invoke(IIncomingGrainCallContext context)
        {
            if (AuthorizationAdmission.IsRequired(context))
            {
                var claims = await AuthorizeAsync(context);

                var grainType = context.Grain.GetType();

                if (grainType.BaseType == typeof(GrainWithClaimsPrincipal))
                {
                    var claimsIdentity = new ClaimsIdentity(claims,
                                                            "", JwtClaimTypes.Subject, JwtClaimTypes.Role);

                    var claimsPrincipal = new ClaimsPrincipal(claimsIdentity);
                    RequestContext.Set(ConfigurationKeys.ClaimsPrincipalKey, claimsPrincipal);
                }

                Log(LoggingEvents.IncomingGrainCallAuthorizationPassed,
                    grainType.Name, context.InterfaceMethod.Name);
            }

            await context.Invoke();
        }