public async Task RedirectToSsoIfNotLoggedInOnRootUrl() { using (BitOwinTestEnvironment testEnvironment = new BitOwinTestEnvironment(new TestEnvironmentArgs { AdditionalDependencies = manager => { IRandomStringProvider randomStringProvider = A.Fake <IRandomStringProvider>(); A.CallTo(() => randomStringProvider.GetRandomNonSecureString(12)) .Returns("RandomString"); manager.RegisterInstance(randomStringProvider); } })) { HttpResponseMessage getDefaultPageResponse = await testEnvironment.Server.GetHttpClient() .GetAsync("/some-page", HttpCompletionOption.ResponseHeadersRead); Assert.AreEqual(HttpStatusCode.Redirect, getDefaultPageResponse.StatusCode); Assert.AreEqual(@"/core/connect/authorize?scope=openid profile user_info&client_id=Test&redirect_uri=http://localhost/SignIn&response_type=id_token token&state={""pathname"":""/some-page""}&nonce=RandomString", getDefaultPageResponse.Headers.Location.ToString()); } }
public override async Task Invoke(IOwinContext context) { IDependencyResolver dependencyResolver = context.GetDependencyResolver(); IRandomStringProvider randomStringProvider = dependencyResolver.Resolve <IRandomStringProvider>(); if (_baseRedirectUri == null) { IAppEnvironmentProvider appEnvironmentProvider = dependencyResolver .Resolve <IAppEnvironmentProvider>(); AppEnvironment activEnvironment = appEnvironmentProvider.GetActiveAppEnvironment(); _baseRedirectUri = $"{activEnvironment.Security.SSOServerUrl}/connect/authorize?scope={string.Join(" ", activEnvironment.Security.Scopes)}&client_id={activEnvironment.Security.ClientName}&redirect_uri={activEnvironment.GetConfig("ClientHostBaseUri", context.Request.Host.Value)}{activEnvironment.GetConfig("ClientHostVirtualPath", "/")}SignIn&response_type=id_token token"; } string nonce = randomStringProvider.GetRandomNonSecureString(12); string stateArgs = string.Join(string.Empty, context.Request.Path.Value.SkipWhile(c => c == '/')); string redirectUrl = $"{_baseRedirectUri}&state={stateArgs}&nonce={nonce}"; context.Response.Redirect(redirectUrl); }