public async Task ExecuteResultAsync(ActionContext context)
    {
        AuthenticationManager authenticationManager =
            context.HttpContext.Authentication;

        foreach (string scheme in authenticationSchemes)
        {
            await authenticationManager.ChallengeAsync(
                scheme,
                authenticationProperties,
                challengeBehavior);
        }
    }
Example #2
0
        public async Task <ActionResult> Authorize()
        {
            if (Response.StatusCode != 200)
            {
                return(View("AuthorizeError"));
            }

            AuthenticationManager authentication = Request.HttpContext.Authentication;

            ClaimsPrincipal principal = await authentication.AuthenticateAsync("Application");

            if (principal == null)
            {
                await authentication.ChallengeAsync("Application");

                if (Response.StatusCode == 200)
                {
                    return(new UnauthorizedResult());
                }

                return(new StatusCodeResult(Response.StatusCode));
            }

            string[] scopes = { };

            if (Request.QueryString.HasValue)
            {
                var queryStringComponents = QueryHelpers.ParseQuery(Request.QueryString.Value);

                if (queryStringComponents.ContainsKey("scope"))
                {
                    scopes = queryStringComponents["scope"];
                }
            }

            if (Request.Method == "POST")
            {
                if (!string.IsNullOrEmpty(Request.Form["submit.Grant"]))
                {
                    principal = new ClaimsPrincipal(principal.Identities);

                    ClaimsIdentity primaryIdentity = (ClaimsIdentity)principal.Identity;

                    foreach (var scope in scopes)
                    {
                        primaryIdentity.AddClaim(new Claim("urn:oauth:scope", scope));
                    }

                    await authentication.SignInAsync("Bearer", principal);
                }

                if (!string.IsNullOrEmpty(Request.Form["submit.Login"]))
                {
                    await authentication.SignOutAsync("Application");

                    await authentication.ChallengeAsync("Application");

                    return(new UnauthorizedResult());
                }
            }

            return(View());
        }