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);
        }
示例#2
0
        /// <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);
        }
示例#3
0
        /// <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)}");
        }