亚洲视频二区_亚洲欧洲日本天天堂在线观看_日韩一区二区在线观看_中文字幕不卡一区

公告:魔扣目錄網為廣大站長提供免費收錄網站服務,提交前請做好本站友鏈:【 網站目錄:http://www.430618.com 】, 免友鏈快審服務(50元/站),

點擊這里在線咨詢客服
新站提交
  • 網站:51998
  • 待審:31
  • 小程序:12
  • 文章:1030137
  • 會員:747

本文介紹了帶Linux客戶端的401 SPNEGO SSO的處理方法,對大家解決問題具有一定的參考價值,需要的朋友們下面隨著小編來一起學習吧!

問題描述

我無法在Spnego下的Spring Security Web應用程序上將我的Ubuntu VM配置為單點登錄。我做錯了什么嗎?還是我錯過了什么?

我已經在Windows 7虛擬機上進行了SSO,所以我相信它是特定于Linux的。

下面詳細介紹了我的配置。


基礎設施

我有四臺計算機,它們在兩個不同的硬件上運行:

    WIN-SRV2008.company.local:運行Windows Server 2008的VM KDC(硬件A)
    TOMCAT.company.local:運行Tomcat 7Web應用程序(硬件A)
    W7-CLIENT.company.local:運行SSO的VM Windows 7客戶端(硬件B)
    U-CLIENT.company.local:SSO無法工作的VM Ubuntu 17.10.1客戶端(硬件B)

SPN

我的SPN、krb5.inilogin.conf基于this thread’s description。


Spnego

我基本上遵循Spring Security Kerberos – Reference Documentation,只是去掉表單登錄,結果是:

@Configuration
@EnableWebSecurity
@EnableGlobalMethodSecurity(prePostEnabled = true)
public class SecurityConfig extends WebSecurityConfigurerAdapter {

    @Value("${kerberos.service-principal}")
    private String servicePrincipal;

    @Value("${kerberos.keytab-location}")
    private String keytabLocation;

    @Override
    protected void configure(HttpSecurity http) throws Exception {
        AffirmativeBased affirmativeBased = new AffirmativeBased(Arrays.asList(new RoleVoter(),new WebExpressionVoter()));
        http
            .authorizeRequests().accessDecisionManager(affirmativeBased)
            .anyRequest().authenticated()
            .and()
        .httpBasic()
            .authenticationEntryPoint(entryPoint())
            .and()
        .logout()
            .logoutRequestMatcher(new AntPathRequestMatcher("/logout"))
            .and()
        .addFilterBefore(
                    spnegoAuthenticationProcessingFilter(authenticationManagerBean()),
                    BasicAuthenticationFilter.class)
        .sessionManagement()
        .invalidSessionUrl("/login")
        .maximumSessions(1)
        .maxSessionsPreventsLogin(true)
        .sessionRegistry(sessionRegistry());
    }

    @Override
    protected void configure(AuthenticationManagerBuilder auth) throws Exception {
        auth
            .authenticationProvider(kerberosAuthenticationProvider())
            .authenticationProvider(kerberosServiceAuthenticationProvider());
    }

    @Bean
    public SpnegoEntryPoint entryPoint() {
        return new SpnegoEntryPoint();
    }

    @Bean
    public KerberosAuthenticationProvider kerberosAuthenticationProvider() {
        LoginKerberosAuthentication provider = new LoginKerberosAuthentication();
        SunJaasKerberosClient client = new SunJaasKerberosClient();
        client.setDebug(true);
        provider.setKerberosClient(client);
        provider.setUserDetailsService(usuarioDetailsService());
        return provider;
    }

    @Bean
    public SpnegoAuthenticationProcessingFilter spnegoAuthenticationProcessingFilter(
        AuthenticationManager authenticationManager) {
        SpnegoAuthenticationProcessingFilter filter = new SpnegoAuthenticationProcessingFilter();
        filter.setAuthenticationManager(authenticationManager);
        return filter;
    }

    @Bean
    public KerberosServiceAuthenticationProvider kerberosServiceAuthenticationProvider() {
        KerberosServiceAuthenticationProvider provider = new KerberosServiceAuthenticationProvider();
        provider.setTicketValidator(sunJaasKerberosTicketValidator());
        provider.setUserDetailsService(usuarioDetailsService());
        return provider;
    }

    @Bean
    public SunJaasKerberosTicketValidator sunJaasKerberosTicketValidator() {
        SunJaasKerberosTicketValidator ticketValidator = new SunJaasKerberosTicketValidator();
        ticketValidator.setServicePrincipal(servicePrincipal);
        ticketValidator.setKeyTabLocation(new FileSystemResource(keytabLocation));
        ticketValidator.setDebug(true);
        return ticketValidator;
    }

    @Bean
    @Override
    public AuthenticationManager authenticationManagerBean() throws Exception {
        return super.authenticationManagerBean();
    }

    @Bean
    public UsuarioDetailsService usuarioDetailsService() {
        return new UsuarioDetailsService();
    }

Ubuntu客戶端

要加入域,我執行了以下步驟:

sudo apt-get install realmd krb5-user software-properties-common python-software-properties packagekit

sudo realm join COMPANY.local -U '[email protected]' -v

直到我使用以下命令生成Kerberos票證:

kinit [email protected]

我實際使用klist檢查了緩存,結果是:

Ticket cache: FILE:/tmp/krb5cc_1000
Default principal: [email protected]

Valid starting        Expires                Service principal
30/10/2018 17:25:47   31/10/2018 03:25:47    krbtgt/[email protected]
            renew until 31/10/2018 17:25:43

最后,我使用:

成功進行了身份驗證

sudo su [email protected]

SSO-問題

當我嘗試使用Firefox(使用受信任站點配置)訪問我的應用程序主頁時,就像我在Windows 7客戶端上所做的那樣,我只得到the 401 Negotiate header,并且不發送響應令牌。
這意味著,當我向SpnegoEntryPoint構造函數輸入實際的url時,我會被重定向到此回退。


提前謝謝您

推薦答案

多虧了Samson的評論,我才能讓它工作。

我確實通過執行sudo su [email protected]切換到空緩存,這使我的應用程序登錄響應401。

這篇關于帶Linux客戶端的401 SPNEGO SSO的文章就介紹到這了,希望我們推薦的答案對大家有所幫助,

分享到:
標簽:Linux SPNEGO SSO 客戶端
用戶無頭像

網友整理

注冊時間:

網站:5 個   小程序:0 個  文章:12 篇

  • 51998

    網站

  • 12

    小程序

  • 1030137

    文章

  • 747

    會員

趕快注冊賬號,推廣您的網站吧!
最新入駐小程序

數獨大挑戰2018-06-03

數獨一種數學游戲,玩家需要根據9

答題星2018-06-03

您可以通過答題星輕松地創建試卷

全階人生考試2018-06-03

各種考試題,題庫,初中,高中,大學四六

運動步數有氧達人2018-06-03

記錄運動步數,積累氧氣值。還可偷

每日養生app2018-06-03

每日養生,天天健康

體育訓練成績評定2018-06-03

通用課目體育訓練成績評定