public async void TestSaveAndLoad() { await _state.SaveAsync(null, KEY1, VALUE1); await _state.SaveAsync(null, KEY2, VALUE2); var val = await this._state.LoadAsync <string>(null, KEY1); Assert.NotNull(val); Assert.Equal(VALUE1, val); var values = await this._state.LoadBulkAsync <string>(null, new List <string>() { KEY2 }); Assert.Equal(1, values.Count); Assert.Equal(KEY2, values[0].Key); Assert.Equal(VALUE2, values[0].Value); }
/// <summary> /// handle sign out request /// </summary> protected virtual async Task HandleSignOutRequestAsync(HttpContext context) { // save return url to state store var returnUrl = context.Request.Query[OAuth2Consts.Form_ReturnUrl].FirstOrDefault() ?? Uri.EscapeDataString("/"); var state = await _stateGenerator.GenerateAsync(); await _stateStore.SaveAsync(state, returnUrl); // redirect to auth server var clientID = _options.ClientID; var callbackUri = new UriBuilder(); callbackUri.Scheme = context.Request.Scheme; callbackUri.Host = context.Request.Host.Value; callbackUri.Path = _options.SignOutCallbackPath; var targetUri = $"{_options.EndSessionEndpoint}?client_id={clientID}&redirect_uri={Uri.EscapeDataString(callbackUri.ToString())}&state={state}"; context.Response.Redirect(targetUri); }
/// <summary> /// handle end session request /// </summary> protected virtual async Task HandleEndSessionRequestAsync(HttpContext context) { var clientID = context.Request.Query[OAuth2Consts.Form_ClientID].FirstOrDefault(); var redirectURI = context.Request.Query[OAuth2Consts.Form_RedirectUri].FirstOrDefault(); var mr = await _clientValidator.VerifyClientAsync(clientID, redirectURI); if (!mr.IsSuccess) { await ErrorHandler(context.Response, HttpStatusCode.BadRequest, mr.MsgCode, mr.MsgCodeDescription); return; } var state = context.Request.Query[OAuth2Consts.Form_State].FirstOrDefault(); if (string.IsNullOrWhiteSpace(state)) { context.Response.StatusCode = (int)HttpStatusCode.BadRequest; await context.Response.WriteAsync("missing state"); return; } var endSessionID = Guid.NewGuid().ToString("n"); if (!string.IsNullOrWhiteSpace(state)) { await _stateStore.SaveAsync(clientID + ":" + endSessionID, state); } // sign out await context.OAuth2SignOutAsync(); context.Response.Redirect($"{redirectURI}?{OAuth2Consts.Form_State}={Uri.EscapeDataString(state)}&{OAuth2Consts.Form_EndSessionID}={Uri.EscapeDataString(endSessionID)}"); }