2015-02-23 15 views
12

Có một vài ví dụ về việc sử dụng https://github.com/golang/oauth2 nhưng không có mã nào trong số chúng bao gồm việc sử dụng mã thông báo làm mới. Tôi đã thử vài cách tiếp cận, nhưng tôi vẫn không hài lòng với kết quả của mình.Cách xử lý mã thông báo làm mới trong golang/oauth2 client lib

Có mã mẫu hay không hoặc bạn có thể biết một số dự án tại số Github sử dụng oauth2 lib để lấy làm ví dụ?

+1

Từ gist này (https://gist.github.com/jfcote87/89eca3032cd5f9705ba3#file-gistfile1-go-L26-L30) có vẻ như, có bạn nên lấy mã thông báo từ cơ sở dữ liệu của bạn và trả về nó là '* oauth2.Token'. Định nghĩa cấu trúc mã thông báo có tại đây: https://github.com/golang/oauth2/blob/master/token.go#L25-L49. Các liên kết và thảo luận thêm tại đây: https://github.com/golang/oauth2/issues/84 – Intermernet

+1

Ngoài ra, điều này có thể quan tâm "Khách hàng trả lại ứng dụng HTTP bằng mã thông báo đã cung cấp. Mã thông báo sẽ tự động làm mới khi cần thiết. " từ https://godoc.org/golang.org/x/oauth2#Config.Client – Intermernet

+1

Cảm ơn bạn @Intermernet! Tôi sẽ kiểm tra nó tối nay nhưng ngay bây giờ tôi thấy giải pháp cho vấn đề của tôi. Mặc dù mã của tôi có vẻ tương tự nhưng tôi không kiểm tra tính hợp lệ của mã thông báo nên lệnh gọi đầu tiên sau khi hết hạn luôn không thành công. – Andrew

Trả lời

10

Bạn không cần phải bận tâm về mã thông báo làm mới cho đến khi bạn lưu trữ thông số Expiry. Sau khi nhận được đối tượng 'Mã', lưu trữ sau trong cơ sở dữ liệu của bạn:

token.AccessToken, token.RefreshToken, token.TokenTypetoken.Expiry

khi lấy, xây dựng các đối tượng thẻ một lần nữa bằng cách sử dụng các thông số trên:

token := new(oauth2.Token) 
token.AccessToken = {{ From DataBase }} 
token.RefreshToken = {{ From DataBase }} 
token.Expiry = {{ From DataBase }} 
token.TokenType = {{ From DataBase }} 

và sau đó lấy ứng dụng khách http của bạn:

config.Client(ctx, token)

điều này sẽ xử lý làm mới mã thông báo. Trích (thêm thông tin: Golang oauth2 client):

Khách hàng trả về ứng dụng khách HTTP bằng mã thông báo đã cung cấp. Mã thông báo sẽ tự động làm mới khi cần thiết.

Nhược điểm duy nhất là, mã thông báo truy cập được làm mới không được trả lại. Nhưng nó đã có tác dụng! Google không có giới hạn về số lần mã thông báo làm mới được sử dụng.

+0

Bạn nói đúng. Tôi đã đến với mã này sau vài lần thử và nó hoạt động, ít nhiều. Đối với việc cập nhật, tôi đoán tôi sẽ xây dựng cấu trúc Client với một số loại hook. – Andrew

+0

Dù sao đây là điều bắt buộc đối với trường hợp của tôi vì máy chủ làm mới cả accessToken và refreshToken, vì vậy tôi nên bắt làm mới và lưu trữ nó trong cơ sở dữ liệu ngay lập tức. – Andrew

+0

hey @Andrew Tôi đang tìm cách làm điều tương tự, bạn đã làm gì để lưu trữ mã thông báo làm mới và thay thế mã thông báo truy cập cũ hơn? – macguy

Các vấn đề liên quan