2222
2323package eu .webeid .example .security ;
2424
25+ import eu .webeid .security .authtoken .SupportedSignatureAlgorithm ;
2526import eu .webeid .security .certificate .CertificateData ;
27+ import org .springframework .lang .Nullable ;
2628import org .springframework .security .core .Authentication ;
2729import org .springframework .security .core .GrantedAuthority ;
2830import org .springframework .security .web .authentication .preauth .PreAuthenticatedAuthenticationToken ;
3638public class WebEidAuthentication extends PreAuthenticatedAuthenticationToken implements Authentication {
3739
3840 private final String idCode ;
41+ private final transient String signingCertificate ;
42+ private final transient List <SupportedSignatureAlgorithm > supportedSignatureAlgorithms ;
3943
40- public static Authentication fromCertificate (X509Certificate userCertificate , List <GrantedAuthority > authorities ) throws CertificateEncodingException {
41- final String principalName = getPrincipalNameFromCertificate (userCertificate );
42- final String idCode = CertificateData .getSubjectIdCode (userCertificate )
43- .orElseThrow (() -> new CertificateEncodingException ("Certificate does not contain subject ID code" ));
44- return new WebEidAuthentication (principalName , idCode , authorities );
45- }
46-
47- public String getIdCode () {
48- return idCode ;
49- }
50-
51- private WebEidAuthentication (String principalName , String idCode , List <GrantedAuthority > authorities ) {
44+ private WebEidAuthentication (String principalName , String idCode , String signingCertificate , List <SupportedSignatureAlgorithm > supportedSignatureAlgorithms , List <GrantedAuthority > authorities ) {
5245 super (principalName , idCode , authorities );
5346 this .idCode = idCode ;
47+ this .signingCertificate = signingCertificate ;
48+ this .supportedSignatureAlgorithms = supportedSignatureAlgorithms ;
49+ }
50+
51+ public static Authentication fromCertificate (X509Certificate userCertificate , @ Nullable String signingCertificate , @ Nullable List <SupportedSignatureAlgorithm > supportedSignatureAlgorithms , List <GrantedAuthority > authorities ) throws CertificateEncodingException {
52+ final String principalName = getPrincipalNameFromCertificate (userCertificate );
53+ final String idCode = CertificateData .getSubjectIdCode (userCertificate )
54+ .orElseThrow (() -> new CertificateEncodingException ("Certificate does not contain subject ID code" ));
55+ return new WebEidAuthentication (principalName , idCode , signingCertificate , supportedSignatureAlgorithms , authorities );
5456 }
5557
5658 private static String getPrincipalNameFromCertificate (X509Certificate userCertificate ) throws CertificateEncodingException {
@@ -62,10 +64,22 @@ private static String getPrincipalNameFromCertificate(X509Certificate userCertif
6264 } else {
6365 // Organization certificates do not have given name and surname fields.
6466 return CertificateData .getSubjectCN (userCertificate )
65- .orElseThrow (() -> new CertificateEncodingException ("Certificate does not contain subject CN" ));
67+ .orElseThrow (() -> new CertificateEncodingException ("Certificate does not contain subject CN" ));
6668 }
6769 }
6870
71+ public String getIdCode () {
72+ return idCode ;
73+ }
74+
75+ public String getSigningCertificate () {
76+ return signingCertificate ;
77+ }
78+
79+ public List <SupportedSignatureAlgorithm > getSupportedSignatureAlgorithms () {
80+ return supportedSignatureAlgorithms ;
81+ }
82+
6983 @ Override
7084 public boolean equals (Object o ) {
7185 if (!super .equals (o )) return false ;
0 commit comments