如何在PCF中使用Windows身份验证?

时间:2018-08-09 13:20:23

标签: .net sql-server asp.net-core-mvc cloud pcf

我正在尝试从PCF中部署的.net核心应用程序连接到SQL Server。使用用户名和密码时,我可以连接。 但是无法配置Windows身份验证。我的应用要求使用Windows身份验证

此链接(https://github.com/Microsoft/vscode-mssql/issues/985#issuecomment-345408856) 说在SQL中启用Kerberos身份验证。

我已经用kerberos配置了SQL Server。仍然无法连接。还需要什么?

我在连接时遇到异常:

  

无法访问Kerberos票证。确保Kerberos已使用“ kinit”初始化。

2 个答案:

答案 0 :(得分:0)

根据https://dotnet-cookbook.cfapps.io/wcf/上的帖子,PCF不支持Windows身份验证-

由于Cloud Foundry单元及其容器未加入域,因此它们无法使用Active Directory帐户对呼叫进行身份验证。另一种选择是使用基于https的基本身份验证或基于证书的身份验证

答案 1 :(得分:0)

此答案不正确。我能够使用kerberos从PCF连接到SQL Server。
首先,我创建了一个用于连接数据库的用户ID和密码,并使用Windows身份验证检查了是否能够连接到数据库。
然后我创建了一个krb5.config。
样本文件

[libdefaults]
    renew_lifetime = 7d
    forwardable = false
    default_realm = ABC.NET
    ticket_lifetime = 24h
    dns_lookup_realm = false
    dns_lookup_kdc = false
    #default_tgs_enctypes = aes des3-cbc-sha1 rc4 des-cbc-md5
    #default_tkt_enctypes = aes des3-cbc-sha1 rc4 des-cbc-md5
    #hortonworks hive jdbc troubleshooting
    udp_preference_limit = 1
    
    
    [domain_realm]
        abc.net = ABC.NET
    
    [logging]
        default = FILE:/var/log/krb5kdc.log
        admin_server = FILE:/var/log/kadmind.log
        kdc = FILE:/var/log/krb5kdc.log
    
    [realms]
        ABC.NET = {
            admin_server = server.abc.net
            kdc = server.abc.net
        }

此后,我创建了一个SQLDriver Config文件:

SQLJDBCDriver {
    com.sun.security.auth.module.Krb5LoginModule required
    debug=true
    useTicketCache=true
    renewTGT=true
    ticketCache="/home/vcap/app/krb_ticket"
    useKeyTab=true
    keyTab="/home/vcap/app/BOOT-INF/classes/test.keytab"
    principal="userid@ABC.NET"
    useFirstPass=true
    tryFirstPass=true
    storePass=true
    storeKey=true
    serviceName="database-host-name"
}
    
JAVA_OPTS: -XX:ParallelGCThreads=8 -XX:MaxPermSize=2048m -XX:+UseConcMarkSweepGC -XX:+UseCompressedOops -XX:MaxDirectMemorySize=512m -Duser.timezone="America/Chicago" -DLOG_FILE="/home/vcap/logs/activity.log" -Djava.security.krb5.conf=/home/vcap/app/BOOT-INF/classes/krb5-test.conf -Dsun.security.krb5.debug=true -Djava.security.krb5.realm=ABC.NET -Djava.security.krb5.kdc=server.abc.net -Djavax.security.auth.useSubjectCredsOnly=false -Djava.security.auth.login.config=/home/vcap/app/BOOT-INF/classes/mssql-jdbc-test.conf
    doNotPrompt=true;
};

DataSource config

我将所有配置文件都包含在资源文件夹中。

对我有用