2013-04-02 9 views
6

Podążyłem za instructions, aby utworzyć niestandardową dziedzinę bezpieczeństwa dla mojej szklarni. Wszystko działa dobrze, użytkownicy są uwierzytelniani poprawnie. Jednak problem jest następujący:Jak korzystać z niestandardowego zleceniodawcy w niestandardowej dziedzinie bezpieczeństwa (Glassfish)?

  • poświadczenia użytkownika są szyfrowane w ciąg
  • Sfera odszyfrowuje ten ciąg i wykonuje uwierzytelniania w bazie danych (prace)
  • Zamiast używać odszyfrowane wartości jako główny w securityContext przekazywany jest zaszyfrowany łańcuch .

Próbowałem już przesłonić metodę commit(), aby zastąpić _userPrincipal lub dołączyć własną implementację przy użyciu getSubject().getPrincipals().add(new PrincipalImpl("user")). Żaden z nich nie działał zgodnie z oczekiwaniami. Zasadniczo, pytanie jest proste: Jak mogę ustawić własną regułę w niestandardowej sferze bezpieczeństwa w glassfish w sposób, który umożliwia jej użycie wraz z wstrzykniętym securityContext?

Moja okolica:

  • GlassFish 3.1.2.2 (Build 5) pełny profil
  • uruchomionej aplikacji za uwierzytelnianie jest JAX-RS 1.1 wniosku oparty
  • SecurityContext uzyskuje się za pomocą zastrzyku

Odpowiedz

2

Próbowałem już zastąpić metodę commit(), aby zastąpić _userPrin cipal lub dołącz moją własną implementację za pomocą getSubject(). getPrincipals(). add (new PrincipalImpl ("user")). Ani nie działało zgodnie z oczekiwaniami.

Jakiego rodzaju błąd (e) dostałeś?

Niezależnie, myślę, że twoja sprawa leży na trzecim etapie tego procesu. SecurityContext definiuje tylko BASIC_AUTH, FORM_AUTH, CLIENT_CERT_AUTH, DIGEST_AUTH jako AuthenticationScheme, więc być może SecurityContext nie może zobaczyć Twojej implementacji twojego schematu bezpieczeństwa lub typu. Ale możesz spróbować tych kroków i mam nadzieję, że będą dla ciebie skuteczne.

A- Wdrożenie Java Uwierzytelnianie i autoryzacja serwisowa (JAAS) LoginModule lub przedłużyć com.sun.appserv.security.AppservPasswordLoginModule

public class MyLoginModule extends AppservPasswordLoginModule { 

@Override 
protected void authenticateUser() throws LoginException { 
    if (!authenticate(_username, _password)) { 
//Login fails 
     throw new LoginException("LoginFailed"); 
    } 
    String[] myGroups = getGroupNames(_username); 
    commitUserAuthentication(myGroups); 
} 

private boolean authenticate(String username, String password) { 
    /* 
    Check the credentials against the authentication source, return true if   authenticated, return false otherwise 
    */ 
    return true; 
} 

private String[] getGroupNames(String username) { 
// Return the list of groups this user belongs to. 
} 

B- Wdrażanie swoją klasę królestwa.

public class MyRealm extends AppservRealm { 

@Override 
public void init(Properties props) 
throws BadRealmException, NoSuchRealmException { 
//here you initialize the realm 
} 
@Override 
public String getAuthType() { 
return "Custom Realm"; 
} 
} 

C- Instalowanie i konfigurowanie dziedziny i modułu logowania na serwerze.

do tego trzeba spojrzeć na JSR 196 i napisać własny SAM przez wszczepienie javax.security.auth.message.module.ServerAuthModule. Spójrz na link poniżej. https://blogs.oracle.com/enterprisetechtips/entry/adding_authentication_mechanisms_to_the

+0

Ponieważ pytanie zostało zadane 10 miesięcy temu, nie mogę ci już więcej powiedzieć, jakie robimy błędy. Niestety nie będę mógł przetestować twoich podejść, ponieważ użyliśmy innego rozwiązania. Ale ponieważ starałeś się odpowiedzieć na tak stare pytanie, i tak odpowiem na twoją odpowiedź :) – Kai