public static ExpectedQueryValues Defaults(string authority) { var result = new ExpectedQueryValues(authority); result.Scope = OpenIdConnectScopes.OpenIdProfile; result.ResponseType = OpenIdConnectResponseTypes.CodeIdToken; return result; }
public async Task ChallengeWillUseEvents() { var queryValues = new ExpectedQueryValues(DefaultAuthority); var queryValuesSetInEvent = new ExpectedQueryValues(DefaultAuthority); var server = CreateServer(options => { SetOptions(options, DefaultParameters(), queryValues); options.Events = new OpenIdConnectEvents() { OnRedirectToAuthenticationEndpoint = context => { context.ProtocolMessage.ClientId = queryValuesSetInEvent.ClientId; context.ProtocolMessage.RedirectUri = queryValuesSetInEvent.RedirectUri; context.ProtocolMessage.Resource = queryValuesSetInEvent.Resource; context.ProtocolMessage.Scope = queryValuesSetInEvent.Scope; return(Task.FromResult <object>(null)); } }; }); var transaction = await SendAsync(server, DefaultHost + Challenge); Assert.Equal(HttpStatusCode.Redirect, transaction.Response.StatusCode); queryValuesSetInEvent.CheckValues(transaction.Response.Headers.Location.AbsoluteUri, DefaultParameters()); }
public async Task ChallengeWillUseNotifications() { var queryValues = new ExpectedQueryValues(DefaultAuthority); var queryValuesSetInNotification = new ExpectedQueryValues(DefaultAuthority); var server = CreateServer(options => { SetOptions(options, DefaultParameters(), queryValues); options.Notifications = new OpenIdConnectAuthenticationNotifications { RedirectToIdentityProvider = notification => { notification.ProtocolMessage.ClientId = queryValuesSetInNotification.ClientId; notification.ProtocolMessage.RedirectUri = queryValuesSetInNotification.RedirectUri; notification.ProtocolMessage.Resource = queryValuesSetInNotification.Resource; notification.ProtocolMessage.Scope = queryValuesSetInNotification.Scope; return(Task.FromResult <object>(null)); } }; }); var transaction = await SendAsync(server, DefaultHost + Challenge); transaction.Response.StatusCode.ShouldBe(HttpStatusCode.Redirect); queryValuesSetInNotification.CheckValues(transaction.Response.Headers.Location.AbsoluteUri, DefaultParameters()); }
public static ExpectedQueryValues Defaults(string authority) { var result = new ExpectedQueryValues(authority); result.Scope = OpenIdConnectScopes.OpenIdProfile; result.ResponseType = OpenIdConnectResponseTypes.CodeIdToken; return(result); }
public async Task ChallengeWillUseOptionsProperties() { var queryValues = new ExpectedQueryValues(DefaultAuthority); var server = CreateServer(options => { SetOptions(options, DefaultParameters(), queryValues); }); var transaction = await SendAsync(server, DefaultHost + Challenge); transaction.Response.StatusCode.ShouldBe(HttpStatusCode.Redirect); queryValues.CheckValues(transaction.Response.Headers.Location.AbsoluteUri, DefaultParameters()); }
public async Task ChallengeWillSetDefaults() { var stateDataFormat = new AuthenticationPropertiesFormaterKeyValue(); var queryValues = ExpectedQueryValues.Defaults(DefaultAuthority); queryValues.State = OpenIdConnectAuthenticationDefaults.AuthenticationPropertiesKey + "=" + stateDataFormat.Protect(new AuthenticationProperties()); var server = CreateServer(options => { SetOptions(options, DefaultParameters(), queryValues); }); var transaction = await SendAsync(server, DefaultHost + Challenge); transaction.Response.StatusCode.ShouldBe(HttpStatusCode.Redirect); queryValues.CheckValues(transaction.Response.Headers.Location.AbsoluteUri, DefaultParameters()); }
public async Task SignOutSettingMessage() { var configuration = new OpenIdConnectConfiguration { EndSessionEndpoint = ExpectedLogoutRequest }; var queryValues = new ExpectedQueryValues(DefaultAuthority, configuration) { RequestType = OpenIdConnectRequestType.LogoutRequest }; var server = CreateServer(SetProtocolMessageOptions); var transaction = await SendAsync(server, DefaultHost + Signout); Assert.Equal(HttpStatusCode.Redirect, transaction.Response.StatusCode); queryValues.CheckValues(transaction.Response.Headers.Location.AbsoluteUri, new string[] { }); }
public async Task ChallengeSettingMessage(string challenge, OpenIdConnectRequestType requestType) { var configuration = new OpenIdConnectConfiguration { AuthorizationEndpoint = ExpectedAuthorizeRequest, EndSessionEndpoint = ExpectedLogoutRequest }; var queryValues = new ExpectedQueryValues(DefaultAuthority, configuration) { RequestType = requestType }; var server = CreateServer(SetProtocolMessageOptions); var transaction = await SendAsync(server, DefaultHost + challenge); transaction.Response.StatusCode.ShouldBe(HttpStatusCode.Redirect); queryValues.CheckValues(transaction.Response.Headers.Location.AbsoluteUri, new string[] {}); }
public async Task ChallengeSettingState(string userState, string challenge) { var queryValues = new ExpectedQueryValues(DefaultAuthority); var stateDataFormat = new AuthenticationPropertiesFormaterKeyValue(); var properties = new AuthenticationProperties(); if (challenge == ChallengeWithProperties) { properties.Items.Add("item1", Guid.NewGuid().ToString()); } var server = CreateServer(options => { SetOptions(options, DefaultParameters(new string[] { OpenIdConnectParameterNames.State }), queryValues, stateDataFormat); options.AutomaticChallenge = challenge.Equals(ChallengeWithOutContext); options.Events = new OpenIdConnectEvents() { OnRedirectToAuthenticationEndpoint = context => { context.ProtocolMessage.State = userState; context.ProtocolMessage.RedirectUri = queryValues.RedirectUri; return(Task.FromResult <object>(null)); } }; }, null, properties); var transaction = await SendAsync(server, DefaultHost + challenge); Assert.Equal(HttpStatusCode.Redirect, transaction.Response.StatusCode); if (challenge != ChallengeWithProperties) { if (userState != null) { properties.Items.Add(OpenIdConnectDefaults.UserstatePropertiesKey, userState); } properties.Items.Add(OpenIdConnectDefaults.RedirectUriForCodePropertiesKey, queryValues.RedirectUri); } queryValues.State = stateDataFormat.Protect(properties); queryValues.CheckValues(transaction.Response.Headers.Location.AbsoluteUri, DefaultParameters(new string[] { OpenIdConnectParameterNames.State })); }
public async Task ChallengeWillUseNotifications() { var queryValues = new ExpectedQueryValues(DefaultAuthority); var queryValuesSetInNotification = new ExpectedQueryValues(DefaultAuthority); var server = CreateServer(options => { SetOptions(options, DefaultParameters(), queryValues); options.Notifications = new OpenIdConnectAuthenticationNotifications { RedirectToIdentityProvider = notification => { notification.ProtocolMessage.ClientId = queryValuesSetInNotification.ClientId; notification.ProtocolMessage.RedirectUri = queryValuesSetInNotification.RedirectUri; notification.ProtocolMessage.Resource = queryValuesSetInNotification.Resource; notification.ProtocolMessage.Scope = queryValuesSetInNotification.Scope; return Task.FromResult<object>(null); } }; }); var transaction = await SendAsync(server, DefaultHost + Challenge); transaction.Response.StatusCode.ShouldBe(HttpStatusCode.Redirect); queryValuesSetInNotification.CheckValues(transaction.Response.Headers.Location.AbsoluteUri, DefaultParameters()); }
private void SetOptions(OpenIdConnectOptions options, List<string> parameters, ExpectedQueryValues queryValues, ISecureDataFormat<AuthenticationProperties> secureDataFormat = null) { foreach (var param in parameters) { if (param.Equals(OpenIdConnectParameterNames.ClientId)) options.ClientId = queryValues.ClientId; else if (param.Equals(OpenIdConnectParameterNames.Resource)) options.Resource = queryValues.Resource; else if (param.Equals(OpenIdConnectParameterNames.Scope)) { options.Scope.Clear(); foreach (var scope in queryValues.Scope.Split(' ')) { options.Scope.Add(scope); } } } options.Authority = queryValues.Authority; options.Configuration = queryValues.Configuration; options.StateDataFormat = secureDataFormat ?? new AuthenticationPropertiesFormaterKeyValue(); }
public async Task ChallengeWillUseEvents() { var queryValues = new ExpectedQueryValues(DefaultAuthority); var queryValuesSetInEvent = new ExpectedQueryValues(DefaultAuthority); var server = CreateServer(options => { SetOptions(options, DefaultParameters(), queryValues); options.Events = new OpenIdConnectEvents() { OnRedirectToAuthenticationEndpoint = context => { context.ProtocolMessage.ClientId = queryValuesSetInEvent.ClientId; context.ProtocolMessage.RedirectUri = queryValuesSetInEvent.RedirectUri; context.ProtocolMessage.Resource = queryValuesSetInEvent.Resource; context.ProtocolMessage.Scope = queryValuesSetInEvent.Scope; return Task.FromResult<object>(null); } }; }); var transaction = await SendAsync(server, DefaultHost + Challenge); Assert.Equal(HttpStatusCode.Redirect, transaction.Response.StatusCode); queryValuesSetInEvent.CheckValues(transaction.Response.Headers.Location.AbsoluteUri, DefaultParameters()); }
public async Task ChallengeSettingState(string userState, string challenge) { var queryValues = new ExpectedQueryValues(DefaultAuthority); var stateDataFormat = new AuthenticationPropertiesFormaterKeyValue(); var properties = new AuthenticationProperties(); if (challenge == ChallengeWithProperties) { properties.Items.Add("item1", Guid.NewGuid().ToString()); } var server = CreateServer(options => { SetOptions(options, DefaultParameters(new string[] { OpenIdConnectParameterNames.State }), queryValues, stateDataFormat); options.AutomaticChallenge = challenge.Equals(ChallengeWithOutContext); options.Events = new OpenIdConnectEvents() { OnRedirectToAuthenticationEndpoint = context => { context.ProtocolMessage.State = userState; context.ProtocolMessage.RedirectUri = queryValues.RedirectUri; return Task.FromResult<object>(null); } }; }, null, properties); var transaction = await SendAsync(server, DefaultHost + challenge); Assert.Equal(HttpStatusCode.Redirect, transaction.Response.StatusCode); if (challenge != ChallengeWithProperties) { if (userState != null) { properties.Items.Add(OpenIdConnectDefaults.UserstatePropertiesKey, userState); } properties.Items.Add(OpenIdConnectDefaults.RedirectUriForCodePropertiesKey, queryValues.RedirectUri); } queryValues.State = stateDataFormat.Protect(properties); queryValues.CheckValues(transaction.Response.Headers.Location.AbsoluteUri, DefaultParameters(new string[] { OpenIdConnectParameterNames.State })); }
private void SetOptions(OpenIdConnectAuthenticationOptions options, List <string> parameters, ExpectedQueryValues queryValues, ISecureDataFormat <AuthenticationProperties> secureDataFormat = null) { foreach (var param in parameters) { if (param.Equals(OpenIdConnectParameterNames.ClientId)) { options.ClientId = queryValues.ClientId; } else if (param.Equals(OpenIdConnectParameterNames.RedirectUri)) { options.RedirectUri = queryValues.RedirectUri; } else if (param.Equals(OpenIdConnectParameterNames.Resource)) { options.Resource = queryValues.Resource; } else if (param.Equals(OpenIdConnectParameterNames.Scope)) { options.Scope = queryValues.Scope; } } options.Authority = queryValues.Authority; options.Configuration = queryValues.Configuration; options.StateDataFormat = secureDataFormat ?? new AuthenticationPropertiesFormaterKeyValue(); }