/// <summary>
        /// Adds SsoServiceInfo (as IOptions of type OAuthServiceOptions) to your Autofac Container
        /// </summary>
        /// <param name="container">Your Autofac Container Builder</param>
        /// <param name="config">Application configuration</param>
        /// <param name="serviceName">Cloud Foundry service name binding</param>
        /// <returns>the RegistrationBuilder for (optional) additional configuration</returns>
        public static IRegistrationBuilder <object, SimpleActivatorData, SingleRegistrationStyle> RegisterOAuthServiceOptions(this ContainerBuilder container, IConfiguration config, string serviceName = null)
        {
            if (container == null)
            {
                throw new ArgumentNullException(nameof(container));
            }

            if (config == null)
            {
                throw new ArgumentNullException(nameof(config));
            }

            OAuthConnectorOptions oauthConfig = new OAuthConnectorOptions(config);

            SsoServiceInfo info;

            if (serviceName == null)
            {
                info = config.GetSingletonServiceInfo <SsoServiceInfo>();
            }
            else
            {
                info = config.GetRequiredServiceInfo <SsoServiceInfo>(serviceName);
            }

            OAuthConnectorFactory factory = new OAuthConnectorFactory(info, oauthConfig);

            return(container.Register(c => factory.Create(null)).As <IOptions <OAuthServiceOptions> >());
        }
        public void Constructor_BindsValues()
        {
            var appsettings = @"
{
   'security': {
        'oauth2': {
            'client': {
                'oauthServiceUrl': 'http://foo.bar',
                'clientId': 'clientid',
                'clientSecret': 'clientsecret',
                'userAuthorizationUri': 'userauthorizationuri',
                'accessTokenUri': 'accesstokenuri',
                'validate_certificates': false,
                'scope': ['foo','bar']
            },
            'resource' : {
                'userInfoUri' : 'userinfouri',
                'tokenInfoUri' : 'tokeninfouri',
                'jwtKeyUri' : 'jwtkeyuri'
            }
        }
   }
}";

            var    path      = TestHelpers.CreateTempFile(appsettings);
            string directory = Path.GetDirectoryName(path);
            string fileName  = Path.GetFileName(path);

            ConfigurationBuilder configurationBuilder = new ConfigurationBuilder();

            configurationBuilder.SetBasePath(directory);
            configurationBuilder.AddJsonFile(fileName);
            var config = configurationBuilder.Build();

            var sconfig = new OAuthConnectorOptions(config);

            Assert.Equal("accesstokenuri", sconfig.AccessTokenUri);
            Assert.Equal("clientid", sconfig.ClientId);
            Assert.Equal("clientsecret", sconfig.ClientSecret);
            Assert.Equal("jwtkeyuri", sconfig.JwtKeyUri);
            Assert.Equal("http://foo.bar", sconfig.OAuthServiceUrl);
            Assert.Equal("tokeninfouri", sconfig.TokenInfoUri);
            Assert.Equal("userauthorizationuri", sconfig.UserAuthorizationUri);
            Assert.Equal("userinfouri", sconfig.UserInfoUri);
            Assert.NotNull(sconfig.Scope);
            Assert.Equal(2, sconfig.Scope.Count);
            Assert.True(sconfig.Scope.Contains("foo") && sconfig.Scope.Contains("bar"));
            Assert.False(sconfig.Validate_Certificates);
        }
Exemplo n.º 3
0
        public void Validate_Certificates_Binds()
        {
            // arrange a configuration with validateCertificates=false
            var appsettings = new Dictionary <string, string>()
            {
                ["security:oauth2:client:validate_certificates"] = "false",
            };
            var configurationBuilder = new ConfigurationBuilder();

            configurationBuilder.AddInMemoryCollection(appsettings);
            var config = configurationBuilder.Build();

            var sconfig = new OAuthConnectorOptions(config);

            Assert.False(sconfig.ValidateCertificates);
        }
Exemplo n.º 4
0
        public void Configure_NoServiceInfo_ReturnsExpected()
        {
            var config     = new OAuthConnectorOptions();
            var configurer = new OAuthConfigurer();
            var result     = configurer.Configure(null, config);

            Assert.NotNull(result);
            var opts = result.Value;

            Assert.NotNull(opts);

            Assert.Equal(OAuthConnectorDefaults.Default_OAuthServiceUrl + OAuthConnectorDefaults.Default_AccessTokenUri, opts.AccessTokenUrl);
            Assert.Equal(OAuthConnectorDefaults.Default_ClientId, opts.ClientId);
            Assert.Equal(OAuthConnectorDefaults.Default_ClientSecret, opts.ClientSecret);
            Assert.Equal(OAuthConnectorDefaults.Default_OAuthServiceUrl + OAuthConnectorDefaults.Default_JwtTokenKey, opts.JwtKeyUrl);
            Assert.Equal(OAuthConnectorDefaults.Default_OAuthServiceUrl + OAuthConnectorDefaults.Default_CheckTokenUri, opts.TokenInfoUrl);
            Assert.Equal(OAuthConnectorDefaults.Default_OAuthServiceUrl + OAuthConnectorDefaults.Default_AuthorizationUri, opts.UserAuthorizationUrl);
            Assert.Equal(OAuthConnectorDefaults.Default_OAuthServiceUrl + OAuthConnectorDefaults.Default_UserInfoUri, opts.UserInfoUrl);
            Assert.True(opts.ValidateCertificates);
            Assert.NotNull(opts.Scope);
            Assert.Equal(0, opts.Scope.Count);
        }
Exemplo n.º 5
0
        public void Update_WithDefaultConnectorOptions_UpdatesOAuthOptions_AsExpected()
        {
            var opts   = new OAuthServiceOptions();
            var config = new OAuthConnectorOptions()
            {
                ValidateCertificates = false
            };
            var configurer = new OAuthConfigurer();

            configurer.UpdateOptions(config, opts);

            Assert.Equal(OAuthConnectorDefaults.Default_OAuthServiceUrl + OAuthConnectorDefaults.Default_AccessTokenUri, opts.AccessTokenUrl);
            Assert.Equal(OAuthConnectorDefaults.Default_ClientId, opts.ClientId);
            Assert.Equal(OAuthConnectorDefaults.Default_ClientSecret, opts.ClientSecret);
            Assert.Equal(OAuthConnectorDefaults.Default_OAuthServiceUrl + OAuthConnectorDefaults.Default_JwtTokenKey, opts.JwtKeyUrl);
            Assert.Equal(OAuthConnectorDefaults.Default_OAuthServiceUrl + OAuthConnectorDefaults.Default_CheckTokenUri, opts.TokenInfoUrl);
            Assert.Equal(OAuthConnectorDefaults.Default_OAuthServiceUrl + OAuthConnectorDefaults.Default_AuthorizationUri, opts.UserAuthorizationUrl);
            Assert.Equal(OAuthConnectorDefaults.Default_OAuthServiceUrl + OAuthConnectorDefaults.Default_UserInfoUri, opts.UserInfoUrl);
            Assert.False(opts.ValidateCertificates);
            Assert.NotNull(opts.Scope);
            Assert.Equal(0, opts.Scope.Count);
        }
Exemplo n.º 6
0
        public void Configure_ServiceInfoOveridesConfig_ReturnsExpected()
        {
            var si         = new SsoServiceInfo("myId", "myClientId", "myClientSecret", "https://foo.bar");
            var config     = new OAuthConnectorOptions();
            var configurer = new OAuthConfigurer();
            var result     = configurer.Configure(si, config);

            Assert.NotNull(result);
            var opts = result.Value;

            Assert.NotNull(opts);

            Assert.Equal("https://foo.bar" + OAuthConnectorDefaults.Default_AccessTokenUri, opts.AccessTokenUrl);
            Assert.Equal("myClientId", opts.ClientId);
            Assert.Equal("myClientSecret", opts.ClientSecret);
            Assert.Equal("https://foo.bar" + OAuthConnectorDefaults.Default_JwtTokenKey, opts.JwtKeyUrl);
            Assert.Equal("https://foo.bar" + OAuthConnectorDefaults.Default_CheckTokenUri, opts.TokenInfoUrl);
            Assert.Equal("https://foo.bar" + OAuthConnectorDefaults.Default_AuthorizationUri, opts.UserAuthorizationUrl);
            Assert.Equal("https://foo.bar" + OAuthConnectorDefaults.Default_UserInfoUri, opts.UserInfoUrl);
            Assert.True(opts.ValidateCertificates);
            Assert.NotNull(opts.Scope);
            Assert.Equal(0, opts.Scope.Count);
        }
Exemplo n.º 7
0
        public void Create_ReturnsOAuthOptions()
        {
            var si     = new SsoServiceInfo("myId", "myClientId", "myClientSecret", "https://foo.bar");
            var config = new OAuthConnectorOptions();

            var factory = new OAuthConnectorFactory(si, config);
            var result  = factory.Create(null);

            Assert.NotNull(result);
            var opts = result.Value;

            Assert.NotNull(opts);

            Assert.Equal("https://foo.bar" + OAuthConnectorDefaults.Default_AccessTokenUri, opts.AccessTokenUrl);
            Assert.Equal("myClientId", opts.ClientId);
            Assert.Equal("myClientSecret", opts.ClientSecret);
            Assert.Equal("https://foo.bar" + OAuthConnectorDefaults.Default_JwtTokenKey, opts.JwtKeyUrl);
            Assert.Equal("https://foo.bar" + OAuthConnectorDefaults.Default_CheckTokenUri, opts.TokenInfoUrl);
            Assert.Equal("https://foo.bar" + OAuthConnectorDefaults.Default_AuthorizationUri, opts.UserAuthorizationUrl);
            Assert.Equal("https://foo.bar" + OAuthConnectorDefaults.Default_UserInfoUri, opts.UserInfoUrl);
            Assert.NotNull(opts.Scope);
            Assert.Equal(0, opts.Scope.Count);
        }
Exemplo n.º 8
0
        public void Constructor_BindsValues()
        {
            var appsettings = new Dictionary <string, string>()
            {
                ["security:oauth2:client:oauthServiceUrl"]      = "https://foo.bar",
                ["security:oauth2:client:clientid"]             = "clientid",
                ["security:oauth2:client:clientSecret"]         = "clientsecret",
                ["security:oauth2:client:userAuthorizationUri"] = "userauthorizationuri",
                ["security:oauth2:client:accessTokenUri"]       = "accesstokenuri",
                ["security:oauth2:client:scope:0"]        = "foo",
                ["security:oauth2:client:scope:1"]        = "bar",
                ["security:oauth2:resource:userInfoUri"]  = "userinfouri",
                ["security:oauth2:resource:tokenInfoUri"] = "tokeninfouri",
                ["security:oauth2:resource:jwtKeyUri"]    = "jwtkeyuri"
            };

            var configurationBuilder = new ConfigurationBuilder();

            configurationBuilder.AddInMemoryCollection(appsettings);
            var config = configurationBuilder.Build();

            var sconfig = new OAuthConnectorOptions(config);

            Assert.Equal("accesstokenuri", sconfig.AccessTokenUri);
            Assert.Equal("clientid", sconfig.ClientId);
            Assert.Equal("clientsecret", sconfig.ClientSecret);
            Assert.Equal("jwtkeyuri", sconfig.JwtKeyUri);
            Assert.Equal("https://foo.bar", sconfig.OAuthServiceUrl);
            Assert.Equal("tokeninfouri", sconfig.TokenInfoUri);
            Assert.Equal("userauthorizationuri", sconfig.UserAuthorizationUri);
            Assert.Equal("userinfouri", sconfig.UserInfoUri);
            Assert.NotNull(sconfig.Scope);
            Assert.Equal(2, sconfig.Scope.Count);
            Assert.True(sconfig.Scope.Contains("foo") && sconfig.Scope.Contains("bar"));
            Assert.True(sconfig.ValidateCertificates);
        }