コード例 #1
0
        public static async Task <IActionResult> Run(
            [HttpTrigger(AuthorizationLevel.Anonymous, "post", Route = null)] HttpRequest req, [Table("PublicKeys")] CloudTable cloudTable,
            ILogger log)
        {
            log.LogInformation("Refresh requestes");
            FunctionContext <dynamic> fc = new FunctionContext <dynamic>(log, req, cloudTable);
            string requestBody           = await new StreamReader(req.Body).ReadToEndAsync();
            string accessToken           = req.Headers.FirstOrDefault(header => header.Key == "Authorization").Value;

            if (accessToken == null || !accessToken.StartsWith("Bearer"))
            {
                return(new UnauthorizedResult());
            }
            dynamic data = JsonConvert.DeserializeObject(requestBody);

            if (data == null)
            {
                return(new BadRequestObjectResult("No Payload available"));
            }
            if (data.refreshToken == null)
            {
                return(new BadRequestObjectResult("No refreshToken submitted"));
            }
            string refreshToken     = data.refreshToken;
            string accessTokenShort = accessToken.Substring(7);

            log.LogInformation(accessTokenShort);
            if (jwtService.CheckRefreshToken(fc, refreshToken, accessTokenShort))
            {
                Tokens tokens = await jwtService.CreateNewTokenFromAccessToken(fc, accessTokenShort);

                return(new OkObjectResult(tokens));
            }
            return(new BadRequestObjectResult("Refresh and access Token Combination not valid"));
        }