2016-11-03 47 views
1

我使用SpringBoot构建了Rest Api,并使用Firebase实现了身份验证。SpringBoot Rest API自定义身份验证

我现在的问题是我想控制将访问我的应用程序的客户端应用程序。使用SpringSecurity的问题是,据我所知,我必须为它进行身份验证,而我只是想“允许客户端应用程序”。

有没有人有任何想法该怎么办?

+0

您的意思是说您不想为某些客户端执行身份验证? – Yasin

+0

不要。所有客户端都必须通过身份验证,但此任务将成为Firebase。在我的服务器上,我将检查应用程序是否有权访问服务器。我的问题恰恰是验证应用程序。 –

回答

0

为您的客户提供一个唯一的密钥。您的微服务根据该密钥识别和验证任何请求。这也可以作为request parameter给出。

假设您将密钥添加到名为my-key的参数中,然后再处理您的逻辑,然后再验证您的密钥。这样的 -

你的休息控制器看起来像这 -

@RestController 
class MyRest{ 

    private static final String KEY = "someValue"; 

    @RequestMapping("/some-mapping") 
    public @ResponseBody myMethod(@RequestParam(value="my-key", required=true) String key){ 
     if(!validateRequest(key)){ 
      //return error as response 
     } 
     System.out.println("Key Validation Successful!"); 
     //here goes your logic 
    } 

    private boolean validateRequest(String key){ 
     return key.equals(KEY); 
    } 
} 

才能访问该休息使用 - 如果你要允许一些客户绕过认证http://your-host:port/some-mapping?my-key=someValue

+0

但是我会在哪里以及如何检查Spring中的密钥? –

+0

用示例更新了答案:) –

+1

这样,任何人都可以访问这些API。更好的方法是在POST中发送数据。但是,如果客户端可以发送“密钥”,则可以轻松使用正常的认证机制。 – Yasin

0

,有列入白名单的IP地址列表并检查每个传入请求的IP。如果IP位于列入白名单的API列表中,则无需进行身份验证。

使用HttpServletRequest.getRemoteAddr()获取IP地址。