5

Tôi đang cố gắng thiết lập bảo mật mùa xuân oauth2 trên ứng dụng của mình trong công cụ ứng dụng của Google. Tất cả mọi thứ dường như làm việc tốt tại địa phương nhưng khi tôi triển khai để những thứ công cụ ứng dụng bắt đầu phá vỡ. Sau khi tôi xác thực thông qua google, nó chuyển tiếp tôi đến trang lỗi Whitelabel. Trong giao diện điều khiển tôi thấy lỗi này:Bật Oauth2sso trên Google App Engine

http://my-application.appspot.com/login?state=t…m&session_state=8b67f5df659a8324430803973b9e1726e39fd454..1ae3&prompt=none 
401 (Unauthorized) 

tôi thiết lập auth của tôi với tập tin này application.yml:

security: 
    oauth2: 
client: 
    clientId: client-key 
    clientSecret: secret-key 
    accessTokenUri: https://www.googleapis.com/oauth2/v4/token 
    userAuthorizationUri: https://accounts.google.com/o/oauth2/v2/auth 
    clientAuthenticationScheme: form 
    scope: 
    - openid 
    - email 
    - profile 
    - https://www.googleapis.com/auth/cloud-platform 
resource: 
    userInfoUri: https://www.googleapis.com/oauth2/v3/userinfo 
    preferTokenInfo: true 

cấu hình an ninh của tôi trông somethign như thế này:

@Override 
protected void configure(HttpSecurity http) throws Exception { 
    http.csrf().csrfTokenRepository(CookieCsrfTokenRepository.withHttpOnlyFalse()) 
     .and() 
      .authorizeRequests() 
      .antMatchers("/static/**").permitAll() 
      .antMatchers("/**").hasAuthority("ROLE_ADMIN") 
      .anyRequest().authenticated() 
     .and() 
      .exceptionHandling() 
      .accessDeniedPage("/403"); 
} 

Tôi có đã định cấu hình ID Oauth trên trang thông tin xác thực của google để cho phép nguồn gốc javascript được ủy quyền là:

http://my-application.appspot.com 
https://my-application.appspot.com 
http://localhost:8080 

Và các URI chuyển hướng có thẩm quyền:

http://my-application.appspot.com/login 
https://my-application.appspot.com/login 
http://localhost:8080/login 

Bất cứ ý tưởng tại sao tôi có thể nhận được lỗi trái phép một lần tôi triển khai đến GAE?

Cảm ơn,

Craig

+0

Bạn có chắc chắn rằng người dùng mà bạn đang cố gắng để xác thực với có "ROLE_ADMIN" quyền? –

+0

Tích cực. Tôi đã thử loại bỏ nó ra và để nó chỉ với xác thực oauth trên tất cả các trang và nó vẫn cho cùng một lỗi. – craigtb

+0

Nếu có thể, bạn có thể chia sẻ một dự án mẫu tối thiểu, có thể tái sản xuất trên GitHub không? –

Trả lời

2

Vấn đề của bạn là về ủy quyền, có lẽ bỏ qua bước trên cho phép đầy đủ ứng dụng, chẳng hạn như di chuyển client_secret.json của bạn vào thư mục làm việc của bạn.

https://developers.google.com/drive/v3/web/quickstart/java#step_1_turn_on_the_api_name

Bước 1: Bật API Drive

  1. Sử dụng tiện ích này để tạo hoặc chọn một dự án trong Google Developers Console và tự động bật API. Nhấp vào Tiếp tục, sau đó Chuyển đến thông tin đăng nhập. Trên Thêm thông tin đăng nhập vào trang dự án của bạn, hãy nhấp vào nút Hủy.

    1. Ở đầu trang, chọn tab màn hình đồng ý OAuth. Chọn địa chỉ Email, nhập Tên sản phẩm nếu chưa được đặt và nhấp vào nút Lưu. Chọn tab Thông tin xác thực, nhấp vào nút Tạo thông tin đăng nhập và chọn ID ứng dụng khách OAuth.

    2. Chọn loại ứng dụng Khác, nhập tên "Drive API Quickstart" và nhấp vào nút Tạo.

    3. Nhấp vào OK để loại bỏ hộp thoại kết quả.

    4. Nhấp vào nút tệp tải xuống (Tải xuống JSON) ở bên phải của ID khách hàng .

    5. Chuyển tệp này vào thư mục làm việc của bạn và đổi tên nó client_secret.json.

hữu ích liên kết: GCM http 401 authorization error

+0

Điều này đã được giải quyết bằng cách chỉ sử dụng một ví dụ. Nó SEEMS xác thực không đi qua các máy chủ. Havent đã có cơ hội để nhìn vào điều đó. – craigtb