private async Task <Client> CreateClientAsync(
            string name,
            IEnumerable <string> scopes,
            IEnumerable <string> grantTypes,
            string secret                    = null,
            string redirectUri               = null,
            string postLogoutRedirectUri     = null,
            string frontChannelLogoutUri     = null,
            bool requireClientSecret         = true,
            bool requirePkce                 = false,
            IEnumerable <string> permissions = null,
            IEnumerable <string> corsOrigins = null)
        {
            var client = await _clientRepository.FindByClientIdAsync(name);

            if (client == null)
            {
                client = await _clientRepository.InsertAsync(
                    new Client(
                        _guidGenerator.Create(),
                        name
                        )
                {
                    ClientName   = name,
                    ProtocolType = "oidc",
                    Description  = name,
                    AlwaysIncludeUserClaimsInIdToken = true,
                    AllowOfflineAccess           = true,
                    AbsoluteRefreshTokenLifetime = 31536000, //365 days
                    AccessTokenLifetime          = 31536000, //365 days
                    AuthorizationCodeLifetime    = 300,
                    IdentityTokenLifetime        = 300,
                    RequireConsent        = false,
                    FrontChannelLogoutUri = frontChannelLogoutUri,
                    RequireClientSecret   = requireClientSecret,
                    RequirePkce           = requirePkce
                },
                    autoSave : true
                    );
            }

            foreach (var scope in scopes)
            {
                if (client.FindScope(scope) == null)
                {
                    client.AddScope(scope);
                }
            }

            foreach (var grantType in grantTypes)
            {
                if (client.FindGrantType(grantType) == null)
                {
                    client.AddGrantType(grantType);
                }
            }

            if (!secret.IsNullOrEmpty())
            {
                if (client.FindSecret(secret) == null)
                {
                    client.AddSecret(secret);
                }
            }

            if (redirectUri != null)
            {
                if (client.FindRedirectUri(redirectUri) == null)
                {
                    client.AddRedirectUri(redirectUri);
                }
            }

            if (postLogoutRedirectUri != null)
            {
                if (client.FindPostLogoutRedirectUri(postLogoutRedirectUri) == null)
                {
                    client.AddPostLogoutRedirectUri(postLogoutRedirectUri);
                }
            }

            if (permissions != null)
            {
                await _permissionDataSeeder.SeedAsync(
                    ClientPermissionValueProvider.ProviderName,
                    name,
                    permissions,
                    null
                    );
            }

            if (corsOrigins != null)
            {
                foreach (var origin in corsOrigins)
                {
                    if (!origin.IsNullOrWhiteSpace() && client.FindCorsOrigin(origin) == null)
                    {
                        client.AddCorsOrigin(origin);
                    }
                }
            }

            return(await _clientRepository.UpdateAsync(client));
        }
Exemple #2
0
        private async Task <Client> CreateClientAsync(
            string name,
            IEnumerable <string> scopes,
            IEnumerable <string> grantTypes,
            string secret,
            string redirectUri               = null,
            string postLogoutRedirectUri     = null,
            IEnumerable <string> permissions = null)
        {
            var client = await _clientRepository.FindByCliendIdAsync(name);

            if (client == null)
            {
                client = await _clientRepository.InsertAsync(
                    new Client(
                        _guidGenerator.Create(),
                        name
                        )
                {
                    ClientName   = name,
                    ProtocolType = "oidc",
                    Description  = name,
                    AlwaysIncludeUserClaimsInIdToken = true,
                    AllowOfflineAccess           = true,
                    AbsoluteRefreshTokenLifetime = 10800, //3 hours
                    AccessTokenLifetime          = 7200,  //2 hours
                    AuthorizationCodeLifetime    = 300,
                    IdentityTokenLifetime        = 300,
                    RequireConsent = false
                },
                    autoSave : true
                    );
            }

            foreach (var scope in scopes)
            {
                if (client.FindScope(scope) == null)
                {
                    client.AddScope(scope);
                }
            }

            foreach (var grantType in grantTypes)
            {
                if (client.FindGrantType(grantType) == null)
                {
                    client.AddGrantType(grantType);
                }
            }

            if (client.FindSecret(secret) == null)
            {
                client.AddSecret(secret);
            }

            if (redirectUri != null)
            {
                if (client.FindRedirectUri(redirectUri) == null)
                {
                    client.AddRedirectUri(redirectUri);
                }
            }

            if (postLogoutRedirectUri != null)
            {
                if (client.FindPostLogoutRedirectUri(postLogoutRedirectUri) == null)
                {
                    client.AddPostLogoutRedirectUri(postLogoutRedirectUri);
                }
            }

            if (permissions != null)
            {
                await _permissionDataSeeder.SeedAsync(ClientPermissionValueProvider.ProviderName, name, permissions);
            }

            return(await _clientRepository.UpdateAsync(client));
        }