Package de.uhilger.httpserver.oauth
Class BearerAuthenticator
- java.lang.Object
-
- com.sun.net.httpserver.Authenticator
-
- de.uhilger.httpserver.oauth.BearerAuthenticator
-
public class BearerAuthenticator extends Authenticator
Die Klasse Authenticator authentifziert gemäß OAuth-Spezifikation "The OAuth 2.0 Authorization Framework: Bearer Token Usage" https://datatracker.ietf.org/doc/html/rfc6750 weitere Info-Links https://www.oauth.com/oauth2-servers/making-authenticated-requests/refreshing-an-access-token/ https://swagger.io/docs/specification/authentication/bearer-authentication/
-
-
Nested Class Summary
-
Nested classes/interfaces inherited from class com.sun.net.httpserver.Authenticator
Authenticator.Failure, Authenticator.Result, Authenticator.Retry, Authenticator.Success
-
-
Field Summary
Fields Modifier and Type Field Description static String
AUTHORIZATION
static String
BEARER
static String
ERROR
static String
ERROR_DESC
protected Key
key
der Schluessel zur Signatur von Tokensstatic String
MSG_INVALID_TOKEN
static String
MSG_TOKEN_EXPIRED
static String
REALM
static int
SC_UNAUTHORIZED
Status code Unauthorized (401)static String
STR_BLANK
static String
STR_COMMA
static String
STR_EMPTY
static String
STR_EQUAL
static String
STR_QUOTE
static String
STR_SLASH
static String
WWW_AUTHENTICATE
-
Constructor Summary
Constructors Constructor Description BearerAuthenticator()
-
Method Summary
All Methods Instance Methods Concrete Methods Modifier and Type Method Description Authenticator.Result
authenticate(HttpExchange exchange)
protected String
getPrincipalAuthRealm(HttpExchange exchange)
Den Namen des Realms bestimmen, wie er fuer authentifizierte Benutzer vom Principal ausgegeben wirdprotected String
getWWWAuthRealm(HttpExchange exchange)
Den Eintrag fuer das 'realm'-Attribut im WWW-Authenticate Header bestimmenboolean
hasRole(String userId, String roleId)
Pruefen, ob ein Nutzer eine Rolle hatLoginResponse
login(HttpExchange e, String userId, String password)
AnmeldenLoginResponse
refresh(String refreshToken)
void
setExpireSeconds(long seconds)
Die Dauer der Gueltigkeit einer Authentifizierung in Sekundenvoid
setPrincipalAuthRealm(String principalAuthRealm)
Den Namen des Realms setzen, wie er fuer authentifizierte Benutzer vom Principal ausgegeben werden sollvoid
setRealm(de.uhilger.httpserver.auth.realm.Realm realm)
Den Realm dieses Authenticators setzenvoid
setRefreshExpireSeconds(long seconds)
Die Dauer der Gueltigkeit eines Refresh-Token in Sekundenvoid
setRefreshSeconds(long seconds)
Die Dauer bis eine Authentifizierung eine Erneuerung benoetigt in Sekundenvoid
setWWWAuthRealm(String wwwAuthRealm)
Den Eintrag fuer das 'realm'-Attribut zur Nutzung im WWW-Authenticate Header setzenprotected Authenticator.Result
unauthorized(HttpExchange exchange)
Wenn die Anfrage keinen Token enthaelt HTTP/1.1 401 Unauthorized WWW-Authenticate: Bearer realm="example"protected Authenticator.Result
unauthorizedExpired(HttpExchange exchange)
Wenn die Anfrage eine Token enthaelt, der gemaess setRefreshSeconds abgelaufen ist und einen Refresh erfordert.String
validateRefreshToken(String refreshToken)
Bis auf weiteres wird hier der Token nur darauf geprueft, ob er ein gueltiger JWT ist, der mit dem Schluessel dieses Authenticators erzeugt wurde.
-
-
-
Field Detail
-
STR_SLASH
public static final String STR_SLASH
- See Also:
- Constant Field Values
-
STR_BLANK
public static final String STR_BLANK
- See Also:
- Constant Field Values
-
STR_COMMA
public static final String STR_COMMA
- See Also:
- Constant Field Values
-
STR_EMPTY
public static final String STR_EMPTY
- See Also:
- Constant Field Values
-
STR_EQUAL
public static final String STR_EQUAL
- See Also:
- Constant Field Values
-
STR_QUOTE
public static final String STR_QUOTE
- See Also:
- Constant Field Values
-
AUTHORIZATION
public static final String AUTHORIZATION
- See Also:
- Constant Field Values
-
WWW_AUTHENTICATE
public static final String WWW_AUTHENTICATE
- See Also:
- Constant Field Values
-
BEARER
public static final String BEARER
- See Also:
- Constant Field Values
-
REALM
public static final String REALM
- See Also:
- Constant Field Values
-
ERROR
public static final String ERROR
- See Also:
- Constant Field Values
-
ERROR_DESC
public static final String ERROR_DESC
- See Also:
- Constant Field Values
-
MSG_INVALID_TOKEN
public static final String MSG_INVALID_TOKEN
- See Also:
- Constant Field Values
-
MSG_TOKEN_EXPIRED
public static final String MSG_TOKEN_EXPIRED
- See Also:
- Constant Field Values
-
SC_UNAUTHORIZED
public static final int SC_UNAUTHORIZED
Status code Unauthorized (401)- See Also:
- Constant Field Values
-
key
protected final Key key
der Schluessel zur Signatur von Tokens
-
-
Method Detail
-
authenticate
public Authenticator.Result authenticate(HttpExchange exchange)
- Specified by:
authenticate
in classAuthenticator
-
login
public LoginResponse login(HttpExchange e, String userId, String password)
Anmelden- Parameters:
userId
- die Kennung des Benutzerspassword
- das Kennwort des Benutzers- Returns:
- Token oder null, wenn die Anmeldung misslang
-
refresh
public LoginResponse refresh(String refreshToken)
-
validateRefreshToken
public String validateRefreshToken(String refreshToken)
Bis auf weiteres wird hier der Token nur darauf geprueft, ob er ein gueltiger JWT ist, der mit dem Schluessel dieses Authenticators erzeugt wurde. Evtl. wird es in Zukunft noch noetig, weitere Kriterien einzubauen, z.B. ob er zu einem Token aussgegeben wurde, der noch gilt.- Parameters:
refreshToken
-- Returns:
- die Benutzerkennung aus dem Refresh Token, wenn der Refresh Token fuer einen Token Refresh akzeptiert wird, null wenn nicht.
-
getWWWAuthRealm
protected String getWWWAuthRealm(HttpExchange exchange)
Den Eintrag fuer das 'realm'-Attribut im WWW-Authenticate Header bestimmen- Parameters:
exchange
-- Returns:
- den Ausdruck fuer den WWW-Authenticate Header
-
getPrincipalAuthRealm
protected String getPrincipalAuthRealm(HttpExchange exchange)
Den Namen des Realms bestimmen, wie er fuer authentifizierte Benutzer vom Principal ausgegeben wird- Parameters:
exchange
-- Returns:
- den Namen des Realms
-
unauthorizedExpired
protected Authenticator.Result unauthorizedExpired(HttpExchange exchange)
Wenn die Anfrage eine Token enthaelt, der gemaess setRefreshSeconds abgelaufen ist und einen Refresh erfordert. HTTP/1.1 401 Unauthorized WWW-Authenticate: Bearer realm="example", error="invalid_token", error_description="The access token expired"- Parameters:
exchange
-- Returns:
-
unauthorized
protected Authenticator.Result unauthorized(HttpExchange exchange)
Wenn die Anfrage keinen Token enthaelt HTTP/1.1 401 Unauthorized WWW-Authenticate: Bearer realm="example"- Parameters:
exchange
-- Returns:
- das Ergebnis
-
setRealm
public void setRealm(de.uhilger.httpserver.auth.realm.Realm realm)
Den Realm dieses Authenticators setzen- Parameters:
realm
- der Realm
-
hasRole
public boolean hasRole(String userId, String roleId)
Pruefen, ob ein Nutzer eine Rolle hat- Parameters:
userId
- die Kennung des NutzersroleId
- die Rollen-ID des Nutzers- Returns:
- true, wenn der Nutzer die Rolle hat, false wenn nicht
-
setWWWAuthRealm
public void setWWWAuthRealm(String wwwAuthRealm)
Den Eintrag fuer das 'realm'-Attribut zur Nutzung im WWW-Authenticate Header setzen- Parameters:
wwwAuthRealm
- der Text fuer das realm-Attribut im WWW-Autehnticate-Header
-
setPrincipalAuthRealm
public void setPrincipalAuthRealm(String principalAuthRealm)
Den Namen des Realms setzen, wie er fuer authentifizierte Benutzer vom Principal ausgegeben werden soll- Parameters:
principalAuthRealm
- der Name des Realms fuer authentifizierte Benutzer
-
setExpireSeconds
public void setExpireSeconds(long seconds)
Die Dauer der Gueltigkeit einer Authentifizierung in Sekunden- Parameters:
seconds
- die Sekunden, nach denen die Authentifizierung ungueltig wird
-
setRefreshSeconds
public void setRefreshSeconds(long seconds)
Die Dauer bis eine Authentifizierung eine Erneuerung benoetigt in Sekunden- Parameters:
seconds
- die Sekunden, nach denen die Authentifizierung eine Erneuerung benoetigt
-
setRefreshExpireSeconds
public void setRefreshExpireSeconds(long seconds)
Die Dauer der Gueltigkeit eines Refresh-Token in Sekunden- Parameters:
seconds
- die Anzhal Sekunden, die ein Refresh-Token gueltig ist
-
-