diff --git a/src/main/java/com/supwisdom/dlpay/ServletInitializer.kt b/src/main/java/com/supwisdom/dlpay/ServletInitializer.kt
index 65545c7..b03a1dc 100644
--- a/src/main/java/com/supwisdom/dlpay/ServletInitializer.kt
+++ b/src/main/java/com/supwisdom/dlpay/ServletInitializer.kt
@@ -6,7 +6,7 @@
 class ServletInitializer : SpringBootServletInitializer() {
 
 	override fun configure(application: SpringApplicationBuilder): SpringApplicationBuilder {
-		return application.sources(DlpayApplication::class.java)
+		return application.sources(PayApiApplication::class.java)
 	}
 
 }
diff --git a/src/main/java/com/supwisdom/dlpay/framework/core/JwtTokenUtil.java b/src/main/java/com/supwisdom/dlpay/framework/core/JwtTokenUtil.java
index e43e411..86060cf 100644
--- a/src/main/java/com/supwisdom/dlpay/framework/core/JwtTokenUtil.java
+++ b/src/main/java/com/supwisdom/dlpay/framework/core/JwtTokenUtil.java
@@ -28,11 +28,16 @@
   public String generateToken(Map<String, Object> params) throws JoseException {
     JwtClaims claims = new JwtClaims();
     claims.setIssuer(params.get("issuer").toString());  // who creates the token and signs it
+    if (params.get("audience") != null) {
+      claims.setAudience(params.get("audience").toString());
+    }
     claims.setExpirationTimeMinutesInTheFuture(expiration / 60); // time when the token will expire (10 minutes from now)
-    claims.setGeneratedJwtId(); // a unique identifier for the token
+    claims.setGeneratedJwtId();
     claims.setIssuedAtToNow();  // when the token was issued/created (now)
     claims.setNotBeforeMinutesInThePast(2); // time before which the token is not yet valid (2 minutes ago)
-    claims.setSubject(params.get("subject").toString()); // the subject/principal is whom the token is about
+    if (params.get("subject") != null) {
+      claims.setSubject(params.get("subject").toString()); // the subject/principal is whom the token is about
+    }
     /*
     claims.setClaim("email", "mail@example.com"); // additional claims/attributes about the subject can be added
     List<String> groups = Arrays.asList("group-one", "other-group", "group-three");
diff --git a/src/main/java/com/supwisdom/dlpay/framework/domain/AppClientRedis.java b/src/main/java/com/supwisdom/dlpay/framework/domain/ApiClientRedis.java
similarity index 95%
rename from src/main/java/com/supwisdom/dlpay/framework/domain/AppClientRedis.java
rename to src/main/java/com/supwisdom/dlpay/framework/domain/ApiClientRedis.java
index a45f9f3..faee901 100644
--- a/src/main/java/com/supwisdom/dlpay/framework/domain/AppClientRedis.java
+++ b/src/main/java/com/supwisdom/dlpay/framework/domain/ApiClientRedis.java
@@ -5,7 +5,7 @@
 import javax.persistence.Id;
 
 @RedisHash("app_client")
-public class AppClientRedis {
+public class ApiClientRedis {
   private @Id
   String id;
 
diff --git a/src/main/java/com/supwisdom/dlpay/framework/domain/TApiClient.java b/src/main/java/com/supwisdom/dlpay/framework/domain/TApiClient.java
index 5f19465..35f2610 100644
--- a/src/main/java/com/supwisdom/dlpay/framework/domain/TApiClient.java
+++ b/src/main/java/com/supwisdom/dlpay/framework/domain/TApiClient.java
@@ -6,7 +6,7 @@
 import javax.persistence.Table;
 
 @Entity
-@Table(name = "TT_APICLIENT")
+@Table(name = "TB_APICLIENT")
 public class TApiClient {
   @Id
   @Column(name = "appid", nullable = false, length = 20)
diff --git a/src/main/java/com/supwisdom/dlpay/framework/redisrepo/ApiClientRepository.java b/src/main/java/com/supwisdom/dlpay/framework/redisrepo/ApiClientRepository.java
new file mode 100644
index 0000000..1d48dd1
--- /dev/null
+++ b/src/main/java/com/supwisdom/dlpay/framework/redisrepo/ApiClientRepository.java
@@ -0,0 +1,7 @@
+package com.supwisdom.dlpay.framework.redisrepo;
+
+import com.supwisdom.dlpay.framework.domain.ApiClientRedis;
+import org.springframework.data.repository.CrudRepository;
+
+public interface ApiClientRepository extends CrudRepository<ApiClientRedis, String> {
+}
diff --git a/src/main/java/com/supwisdom/dlpay/framework/redisrepo/AppClientRepository.java b/src/main/java/com/supwisdom/dlpay/framework/redisrepo/AppClientRepository.java
deleted file mode 100644
index 495a122..0000000
--- a/src/main/java/com/supwisdom/dlpay/framework/redisrepo/AppClientRepository.java
+++ /dev/null
@@ -1,7 +0,0 @@
-package com.supwisdom.dlpay.framework.redisrepo;
-
-import com.supwisdom.dlpay.framework.domain.AppClientRedis;
-import org.springframework.data.repository.CrudRepository;
-
-public interface AppClientRepository extends CrudRepository<AppClientRedis, String> {
-}
diff --git a/src/main/kotlin/com/supwisdom/dlpay/DlpayApplication.kt b/src/main/kotlin/com/supwisdom/dlpay/PayApiApplication.kt
similarity index 89%
rename from src/main/kotlin/com/supwisdom/dlpay/DlpayApplication.kt
rename to src/main/kotlin/com/supwisdom/dlpay/PayApiApplication.kt
index c13dae9..b5dd0e5 100644
--- a/src/main/kotlin/com/supwisdom/dlpay/DlpayApplication.kt
+++ b/src/main/kotlin/com/supwisdom/dlpay/PayApiApplication.kt
@@ -16,9 +16,9 @@
 import org.springframework.data.redis.connection.RedisStandaloneConfiguration
 import org.springframework.data.redis.connection.lettuce.LettuceClientConfiguration
 import org.springframework.data.redis.connection.lettuce.LettuceConnectionFactory
-import org.springframework.data.redis.core.RedisKeyValueTemplate
-import org.springframework.data.redis.core.RedisTemplate
 import org.springframework.data.redis.repository.configuration.EnableRedisRepositories
+import org.springframework.security.authentication.ProviderManager
+import org.springframework.security.authentication.dao.DaoAuthenticationProvider
 import org.springframework.security.config.annotation.web.builders.HttpSecurity
 import org.springframework.security.config.annotation.web.configuration.EnableWebSecurity
 import org.springframework.security.config.annotation.web.configuration.WebSecurityConfigurerAdapter
@@ -53,7 +53,7 @@
                 .readFrom(ReadFrom.SLAVE_PREFERRED)
                 .build()
         val serverConfig = RedisStandaloneConfiguration(server, port)
-        if (!password.isNullOrEmpty()) {
+        if (password.isNotEmpty()) {
             serverConfig.password = RedisPassword.of(password)
         }
         serverConfig.database = database
@@ -74,12 +74,23 @@
         return manager
     }
 
+    @Bean
+    fun daoProvider(detailsService: UserDetailsService): DaoAuthenticationProvider {
+        return DaoAuthenticationProvider().also {
+            it.setUserDetailsService(detailsService)
+        }
+    }
+
+    @Bean
+    fun providerManager(daoProvider: DaoAuthenticationProvider): ProviderManager {
+        return ProviderManager(listOf(daoProvider))
+    }
+
+
     companion object {
         @Configuration
         @Order(1)
         class ApiWebSecurityConfigurationAdapter : WebSecurityConfigurerAdapter() {
-//            @Autowired
-//            private lateinit var clientRegistrationRepository: ClientRegistrationRepository
 
             override fun configure(http: HttpSecurity) {
                 http.authorizeRequests()
@@ -125,8 +136,8 @@
 
 
 @SpringBootApplication
-class DlpayApplication
+class PayApiApplication
 
 fun main(args: Array<String>) {
-    runApplication<DlpayApplication>(*args)
+    runApplication<PayApiApplication>(*args)
 }
diff --git a/src/main/kotlin/com/supwisdom/dlpay/framework/controller/security_controller.kt b/src/main/kotlin/com/supwisdom/dlpay/framework/controller/security_controller.kt
index e776623..fe3c279 100644
--- a/src/main/kotlin/com/supwisdom/dlpay/framework/controller/security_controller.kt
+++ b/src/main/kotlin/com/supwisdom/dlpay/framework/controller/security_controller.kt
@@ -7,6 +7,8 @@
 import com.supwisdom.dlpay.framework.redisrepo.AppClientRepository
 import com.supwisdom.dlpay.framework.security.validate.ImageCodeUtil
 import com.supwisdom.dlpay.framework.security.validate.VerifyCode
+import com.supwisdom.dlpay.framework.domain.ApiClientRedis
+import com.supwisdom.dlpay.framework.redisrepo.ApiClientRepository
 import com.supwisdom.dlpay.framework.service.SystemUtilService
 import com.supwisdom.dlpay.framework.util.HmacUtil
 import org.springframework.beans.factory.annotation.Autowired
@@ -27,7 +29,7 @@
 class ApiAuthController {
 
     @Autowired
-    lateinit var repo: AppClientRepository
+    lateinit var repo: ApiClientRepository
 
     @Autowired
     lateinit var apiClient: ApiClientDao
@@ -52,7 +54,7 @@
         }.let {
             val token = generateRandomToken()
             val now = systemUtil.sysdatetime.hostdatetime
-            AppClientRedis().apply {
+            ApiClientRedis().apply {
                 id = appid
                 loginTimestamp = now
                 this.token = HmacUtil.HMACSHA256(token, it.secret)
@@ -72,8 +74,8 @@
         return Base64.getEncoder().encode(random).toString(Charsets.UTF_8)
     }
 
-    private fun checkSecretToken(app: AppClientRedis, secret: String): Boolean {
-        return (app.token == secret)
+    private fun checkSecretToken(api: ApiClientRedis, secret: String): Boolean {
+        return (api.token == secret)
     }
 
     @GetMapping("/authentication")
@@ -117,4 +119,4 @@
 
     @GetMapping("/login")
     fun loginView() = "login"
-}
\ No newline at end of file
+}
