public async Task<IOpenIdClientRegistration> AddAsync(IOpenIdClientMetadata clientMetadata) {
            using (var db = new ClientConfigurationDbContext(options.ConnectionString, options.Schema)) {
                string clientId = await clientIdGenerator.GenerateClientIdAsync(db);
                
                var registration = new OpenIdClientRegistration(clientId) {
                    ClientIdIssuedAtUtc = DateTime.UtcNow
                };

                var client = new Client() {
                    ClientId = clientId,
                    ClientName = clientMetadata.ClientName,
                    RedirectUris = clientMetadata.RedirectUris.ToList(),
                    Flow = GetFlows(clientMetadata.ResponseTypes),
                    LogoUri = clientMetadata.LogoUri,
                    ClientUri = clientMetadata.ClientUri
                };

                if (IsSecretRequired(client.Flow)) {
                    var secret = await secretGenerator.GenerateSecretAsync(db);
                    
                    client.ClientSecrets = new List<Secret> { secret };

                    registration.ClientSecret = secret.Value;
                }
                
                var e = client.ToEntity();
                
                db.Clients.Add(e);
                               
                await db.SaveChangesAsync();
                
                return registration;
            }
        }
        public ClientStore(ClientConfigurationDbContext context)
        {
            if (context == null)
            {
                throw new ArgumentNullException("context");
            }

            this.context = context;
        }
예제 #3
0
		public static void ConfigureClients(IEnumerable<Client> clients, EntityFrameworkServiceOptions options) {
			using(var db = new ClientConfigurationDbContext(options.ConnectionString, options.Schema)) {
				if(!db.Clients.Any()) {
					foreach(var c in clients) {
						var e = c.ToEntity();
						db.Clients.Add(e);
					}
					db.SaveChanges();
				}
			}
		}
        public IdentityAdminCoreManagerTests()
        {
            _identityAdminManagerService = new IdentityAdminManagerService("IdSvr3ConfigAdmin");
            using (var db = new ClientConfigurationDbContext(ConnectionString))
            {
                var allClients = db.Clients.Where(p => true);
                foreach (var c in allClients  )
                {
                    db.Clients.Remove(c);
                }
                db.SaveChanges();
                var testClient = new Client
                {
                    ClientId = "IdToTest",
                    ClientName = _clientName,
                    Enabled = true,
                    Flow = Flows.Implicit,
                    RequireConsent = true,
                    AllowRememberConsent = true,
                    RedirectUris =new List<ClientRedirectUri>() {new ClientRedirectUri {Id = 1, Uri = "www.redirect.com"}},
                    PostLogoutRedirectUris = new List<ClientPostLogoutRedirectUri>(){new ClientPostLogoutRedirectUri{Id = 1, Uri = "www.postRedirectUri.com"}},
                    AllowedScopes = new List<ClientScope>() { new ClientScope { Scope = "read" ,Id = 1} },
                    AccessTokenType = AccessTokenType.Jwt,
                    ClientSecrets = new List<ClientSecret>{new ClientSecret{Id = 1,Description = "removeMe",Type = "ssssshhh", Value = "nothing to see here"}},
                    IdentityProviderRestrictions = new List<ClientIdPRestriction>(){new ClientIdPRestriction{Id = 1,Provider = "www.provideme.com"}},
                    AllowedCustomGrantTypes = new List<ClientCustomGrantType>{new ClientCustomGrantType{Id = 1, GrantType = "Authorization Grant"}},
                    Claims = new List<ClientClaim>{new ClientClaim{Id = 1,Value = "tester", Type = "role"}},
                    AllowedCorsOrigins = new List<ClientCorsOrigin> { new ClientCorsOrigin { Id = 1,Origin = "www.CrossOriginMe.com"} }
                };
                db.Clients.Add(testClient);
                db.SaveChanges();
                _clientSubject = testClient.Id.ToString();
            }

            using (var db = new ScopeConfigurationDbContext(ConnectionString))
            {
                var allScopes = db.Scopes.Where(p => true);
                foreach (var c in allScopes)
                {
                    db.Scopes.Remove(c);
                }
                db.SaveChanges();
                var testScope = new Scope { Name = _scopeName,ScopeClaims = new List<ScopeClaim>{new ScopeClaim{Id = 1,Description = "To Test", Name = "testScope"}}};
                db.Scopes.Add(testScope);
                db.SaveChanges();
                _scopeSubject = testScope.Id.ToString();
            }
        }
        public void CanAddAndDeleteClientRedirectUri()
        {
            using (var db = new ClientConfigurationDbContext(ConfigConnectionStringName))
            {
                db.Clients.Add(new Client
                {
                    ClientId = "test-client",
                    ClientName = "Test Client"
                });

                db.SaveChanges();
            }

            using (var db = new ClientConfigurationDbContext(ConfigConnectionStringName))
            {
                var client = db.Clients.First();

                client.RedirectUris.Add(new ClientRedirectUri
                {
                    Uri = "https://redirect-uri-1"
                });

                db.SaveChanges();
            }

            using (var db = new ClientConfigurationDbContext(ConfigConnectionStringName))
            {
                var client = db.Clients.First();
                var redirectUri = client.RedirectUris.First();

                client.RedirectUris.Remove(redirectUri);

                db.SaveChanges();
            }

            using (var db = new ClientConfigurationDbContext(ConfigConnectionStringName))
            {
                var client = db.Clients.First();

                Assert.Equal(0, client.RedirectUris.Count());
            }
        }
        public void CanAddAndDeleteClientScopes()
        {
            using (var db = new ClientConfigurationDbContext(ConfigConnectionStringName))
            {
                db.Clients.Add(new Client
                {
                    ClientId = "test-client-scopes",
                    ClientName = "Test Client"
                });

                db.SaveChanges();
            }

            using (var db = new ClientConfigurationDbContext(ConfigConnectionStringName))
            {
                var client = db.Clients.First();

                client.AllowedScopes.Add(new ClientScope
                {
                    Scope = "test"
                });

                db.SaveChanges();
            }

            using (var db = new ClientConfigurationDbContext(ConfigConnectionStringName))
            {
                var client = db.Clients.First();
                var scope = client.AllowedScopes.First();

                client.AllowedScopes.Remove(scope);

                db.SaveChanges();
            }

            using (var db = new ClientConfigurationDbContext(ConfigConnectionStringName))
            {
                var client = db.Clients.First();

                Assert.Equal(0, client.AllowedScopes.Count());
            }
        }
 public ClientConfigurationCorsPolicyService(ClientConfigurationDbContext ctx)
 {
     this.context = ctx;
 }
예제 #8
0
 public ClientConfigurationCorsPolicyService(ClientConfigurationDbContext ctx)
 {
     this.context = ctx;
 }
예제 #9
0
        public static void ConfigureClients(IdentityServer3.Core.Models.Client client, EntityFrameworkServiceOptions options)
        {
            using (var db = new ClientConfigurationDbContext(options.ConnectionString, options.Schema))
            {
                if(db.Clients.Any()&&db.Clients.Where(x=>x.ClientId== SSOISConstants.LocalClientId).Count()>0)
                {
                    //Update Client
                    var dbClient = db.Clients.Where(x => x.ClientId == SSOISConstants.LocalClientId).First();

                    if(db.Clients.Where(x => x.ClientId == SSOISConstants.LocalClientId
                    && x.ClientUri== SSOISConstants.LocalClientUri).Count()==0)
                    {
                        var clt = db.Clients.Where(x => x.ClientId == SSOISConstants.LocalClientId).First();
                        clt.ClientUri = SSOISConstants.LocalClientUri;
                        db.Entry(clt).State = EntityState.Modified;
                    }

                    //Secret
                    string screct = SSOISConstants.LocalClientSecret.Sha256();
                    var lstOldSecret = db.Set<ClientSecret>().Where(x => x.Client.Id == dbClient.Id);
                    if (lstOldSecret.Where(x => x.Value == screct).Count() == 0)
                    {
                        db.Set<ClientSecret>().RemoveRange(lstOldSecret);
                        var lstNewSecret = new List<ClientSecret>() {
                        new ClientSecret() {
                            Value = SSOISConstants.LocalClientSecret.Sha256(),
                            Type = "SharedSecret",
                            Client = dbClient
                        } };
                        db.Set<ClientSecret>().AddRange(lstNewSecret);
                    }

                    //RedirectUris
                    var lstOldRed = db.Set<ClientRedirectUri>().Where(x => x.Client.Id == dbClient.Id);
                    var lstOldStrRed = lstOldRed.Select(x => x.Uri).ToList();
                    db.Set<ClientRedirectUri>().RemoveRange(lstOldRed.Where(x=> !SSOISConstants.LocalRedirectUris.Contains(x.Uri)));
                    var lstNewRed = new List<ClientRedirectUri>();
                    foreach (var sel in SSOISConstants.LocalRedirectUris)
                        if (!lstOldStrRed.Contains(sel))
                            lstNewRed.Add(new ClientRedirectUri() { Uri = sel, Client = dbClient });
                    db.Set<ClientRedirectUri>().AddRange(lstNewRed);

                    //PostLogoutRedirectUris
                    var lstOldPost = db.Set<ClientPostLogoutRedirectUri>().Where(x => x.Client.Id == dbClient.Id);
                    var lstOldStrPost = lstOldRed.Select(x => x.Uri).ToList();
                    db.Set<ClientPostLogoutRedirectUri>().RemoveRange(lstOldPost.Where(x => !SSOISConstants.LocalPostLogoutRedirectUris.Contains(x.Uri)));
                    var lstNewPost = new List<ClientPostLogoutRedirectUri>();
                    foreach (var sel in SSOISConstants.LocalPostLogoutRedirectUris)
                        if (!lstOldStrPost.Contains(sel))
                            lstNewPost.Add(new ClientPostLogoutRedirectUri() { Uri = sel, Client = dbClient });
                    db.Set<ClientPostLogoutRedirectUri>().AddRange(lstNewPost);

                    db.SaveChanges();
                }
                else
                {
                    var e = client.ToEntity();
                    db.Clients.Add(e);
                    db.SaveChanges();
                }
            }
        }