0

Ich bin eine Webanwendung mit Spring Boot erstellen. Post-Anfragen können von einer Telefon-App gemacht werden, um Daten in Form von XML in die Cloud hochzuladen. Die Telefone, die Daten übertragen dürfen, müssen Firmentelefone sein. Die Methode zur Authentifizierung der API-Aufrufe besteht darin, die Android-ID des Telefons in einer Unternehmensdatenbank nachzuschlagen. Die Daten werden nur akzeptiert, wenn die Android-ID vorhanden ist. Die Idee ist, die Android-ID in die Kopfzeile von Anfragen einzubetten. Da es sich nicht um eine typische Authentifizierung handelt, wie kann ich es mit Spring Security implementieren? Oder wir brauchen nicht einmal Frühlingssicherheit. Entpacken Sie einfach die Android ID aus der Kopfzeile und suchen Sie in der Datenbank nach. Lehnen Sie die Anfrage ab, wenn es sich nicht um eine gültige ID handelt. Jeder Rat würde helfen.So implementieren Sie benutzerdefinierte Authentifizierung in Spring Boot-Anwendung

Antwort

0

Nichts hindert Sie daran, den Autorisierungsheader auf kreative Weise zu verwenden, d. H. Indem Sie die Android ID darin einbetten. Dann, um die Authentifizierung zu Ihrer Endpunkte hinzufügen, können Sie ein AOP Abfangjäger verwenden:

Geschützter Betrieb Marker-Schnittstelle:

@Target({ElementType.METHOD}) 
@Retention(RetentionPolicy.RUNTIME) 
public @interface ProtectedOperation { 
} 

Interceptor:

@Aspect 
@Component 
public class SecurityAspect { 
    private CorporateService corpService; // this is your custom service to check Android IDs 
    @Autowired 
    public SecurityAspect(CorporateService corpService) { 
     this.corpService = corpService; 
    } 
    @Around("@annotation(operation)") 
    public Object protectedOperationPermissionCheck(final ProceedingJoinPoint pjp, final ProtectedOperation operation) throws Throwable { 
     ServletRequestAttributes requestAttributes = (ServletRequestAttributes) RequestContextHolder.currentRequestAttributes(); 
     String header = requestAttributes.getRequest().getHeader("Authorization"); 
     String androidId = // get the ID from header - try not to use existing authorization header formats like Bearer, Negotiate etc. to avoid collision with other authentication systems 
     if (corpService.isAuthorized(androidId)) { 
      return pjp.proceed(); 
     } 
     response.setStatus(HttpServletResponse.SC_FORBIDDEN); 
     response.flushBuffer(); 
     return null; 
    } 
} 

Achten Sie auf die spring-boot-starter-aop Abhängigkeit hinzufügen zu Ihrer pom.xml, für @Aspect Unterstützung

EDIT: Um einen Endpunkt zu schützen, kommentieren Sie die Endpunkt-Methode in Ihrem c Controller mit @ProtectedOperation, und fügen Sie Ihre Spring Boot-Anwendung @EnableAspectJAutoProxy

hinzu
Verwandte Themen