internal static async Task WriteTo(IOwinResponse response, ResponsePayload payload) { var payloadAsJson = JsonConvert.SerializeObject(new { token = payload.Token }, JsonSerializerSettingsFactory.CreateDefault()); response.ContentType = "application/json"; var writer = new StreamWriter(response.Body); await writer.WriteAsync(payloadAsJson); await writer.FlushAsync(); }
internal static async Task Handle(IOwinContext context, JwtTokenIssuerOptions options) { if (!RequestValidator.HasValidHeaders(context.Request)) { context.Response.StatusCode = 400; // bad request return; } // get request payload (a username/password object) var requestPayload = await RequestReader.ReadFrom(context.Request); if (requestPayload == null) { context.Response.StatusCode = 400; // bad request return; } // authenticate var claims = Authenticate(options, requestPayload).ToList(); if (!claims.Any()) { // no claims means not authenticated, return 400 context.Response.StatusCode = 400; //todo: which status code to return? return; } // create JWT token var token = CreateToken(claims, options); // create response var responsePayload = new ResponsePayload { Token = token }; await ResponseWriter.WriteTo(context.Response, responsePayload); }