2017-09-08 13 views
2

私はspring-bootで提​​供されるアプリを持っています。フロントエンドが必要とするさまざまなことをする「api /...-」コール用のコントローラをいくつか追加しました。私のフロントエンドだけがすべてのユーザーではなく、examlpe.com/api/ ...にアクセスできるように、これらのURLを保護するにはどうすればよいですか?私は誰もがブラウザからexamlpe.com/api/ ...にアクセスすることを望んでいませんが、example.comにアクセスできるはずです。フロントエンドがバックエンドAPIを呼び出すことのみ許可しますか?

url example.com/api/userinfoは、現在ログインしているユーザーに関する情報を返します。私のフロントエンドだけがこれらの呼び出しを行うことができます。

私は、これらの呼び出しに対して何らかの認証を実装する必要があることを認識しています。 apiを呼び出すときに何らかのトークンを送信しますか?ベストプラクティスは何ですか?

+0

これは参考になる場合があります。https://cloud.google.com/endpoints/docs/frameworks/python/restricting-api-access-with-api-keys-frameworks – Prabhav

答えて

0

これは、春のセキュリティ認証によって可能と思われます。要求を送信する際には、認証パラメータを渡す必要があります。認証パラメータは、春のセキュリティモジュールによって検証され、その後、あなたのコントローラに到達します。私はまだそれを試していない。このうち

チェック: How to secure REST API with Spring Boot and Spring Security?

0

htmlファイルを提供FrontController.java

  1. を言い、提供するためにのみ
  2. FrontApi.javaを二つのパッケージまたは少なくとも2つのクラスファイルを作成しますが、APIを提供しますデータのみ

トークンなしで誰もアクセスできないようにSpringトークンベース(jwt)セキュリティを追加するブラウザからのur api。 Angularは、リクエストごとにトークンを追加することができます。

@Controller 
@RequestMapping("/") 
public class FrontController { 

    @RequestMapping(value = "", method = RequestMethod.GET) 
    public String getFrontPage(){ 
     return "/frontPage"; 
    } 
} 


@RestController 
@RequestMapping("/api/v1/front") 
public class FrontApi { 

    @RequestMapping(value = "", method = RequestMethod.GET) 
    public Data getFrontData(){ 
     // call service 
     // return data 
    } 
} 

@Configuration 
@EnableWebSecurity 
public class WebSecurityConfig extends WebSecurityConfigurerAdapter { 
    @Override 
    protected void configure(HttpSecurity http) throws Exception { 
     http 
      .authorizeRequests() 
       .antMatchers("/").permitAll() 
       .anyRequest().authenticated() 
       .and() 
      .formLogin() 
       .loginPage("/login") 
       .permitAll() 
       .and() 
      .logout() 
       .permitAll(); 
    } 
} 

と私は、フロントエンドのコードをスキップセキュリティ依存&を追加することを忘れないでください。

<dependency> 
    <groupId>org.springframework.boot</groupId> 
    <artifactId>spring-boot-starter-security</artifactId> 
</dependency> 
0

カスタムCORSFilterを追加し、ヘッダにアクセス制御 - 許可 - 起源フィールドで許可されたURLを追加することにより、要求の発信元をrestringすることができます。以下はその達成方法です -

public class CORSFilter implements Filter { 

public void doFilter(ServletRequest req, ServletResponse res, FilterChain chain) throws IOException, ServletException { 
    System.out.println("Filtering on..........................................................."); 
    HttpServletResponse response = (HttpServletResponse) res; 
    response.setHeader("Access-Control-Allow-Origin", "permitted URL here"); 
    response.setHeader("Access-Control-Allow-Credentials", "true"); 
    response.setHeader("Access-Control-Allow-Methods", "POST, GET, PUT, OPTIONS, DELETE"); 
    response.setHeader("Access-Control-Max-Age", "3600"); 
    response.setHeader("Access-Control-Allow-Headers", "X-Requested-With, Content-Type, Authorization, Origin, Accept, Access-Control-Request-Method, Access-Control-Request-Headers"); 

    chain.doFilter(req, res); 
} 

public void init(FilterConfig filterConfig) {} 

public void destroy() {} 

} 

このフィルタは、必要に応じて変更することができます。ヘッダ値は、侵入者によって破られることができるように

EDIT

上記の方法は、完全に安全ではありません。最高のソリューションは、トークンベースの認証を使用することです。 JWTは、ここで最善のオプションの一つです。

関連する問題