auth
2014-08-01
Parent:7a6f64db7246
auth/README.md
Continue our descent to horribleness. Remove all the nonsense about "extensibility" and "clean separation of concerns", instead hardcoding connections to decisions. Remove all those "test" things that stopped passing.
| paddy@0 | 1 OSIN |
| paddy@0 | 2 ==== |
| paddy@0 | 3 |
| paddy@0 | 4 Golang OAuth2 server library |
| paddy@0 | 5 ---------------------------- |
| paddy@0 | 6 |
| paddy@0 | 7 OSIN is an OAuth2 server library for the Go language, as specified at |
| paddy@0 | 8 http://tools.ietf.org/html/rfc6749 and http://tools.ietf.org/html/draft-ietf-oauth-v2-10. |
| paddy@0 | 9 |
| paddy@0 | 10 Using it, you can build your own OAuth2 authentication service. |
| paddy@0 | 11 |
| paddy@0 | 12 The library implements the majority of the specification, like authorization and token endpoints, and authorization code, implicit, resource owner and client credentials grant types. |
| paddy@0 | 13 |
| paddy@0 | 14 ### Dependencies |
| paddy@0 | 15 |
| paddy@0 | 16 * go-uuid (http://code.google.com/p/go-uuid) |
| paddy@0 | 17 |
| paddy@0 | 18 ### Example Server |
| paddy@0 | 19 |
| paddy@0 | 20 ````go |
| paddy@0 | 21 import "github.com/RangelReale/osin" |
| paddy@0 | 22 |
| paddy@0 | 23 // TestStorage implements the "osin.Storage" interface |
| paddy@0 | 24 server := osin.NewServer(osin.NewServerConfig(), &TestStorage{}) |
| paddy@0 | 25 |
| paddy@0 | 26 // Authorization code endpoint |
| paddy@0 | 27 http.HandleFunc("/authorize", func(w http.ResponseWriter, r *http.Request) { |
| paddy@0 | 28 resp := server.NewResponse() |
| paddy@0 | 29 if ar := server.HandleAuthorizeRequest(resp, r); ar != nil { |
| paddy@0 | 30 |
| paddy@0 | 31 // HANDLE LOGIN PAGE HERE |
| paddy@0 | 32 |
| paddy@0 | 33 ar.Authorized = true |
| paddy@0 | 34 server.FinishAuthorizeRequest(resp, r, ar) |
| paddy@0 | 35 } |
| paddy@0 | 36 osin.OutputJSON(resp, w, r) |
| paddy@0 | 37 }) |
| paddy@0 | 38 |
| paddy@0 | 39 // Access token endpoint |
| paddy@0 | 40 http.HandleFunc("/token", func(w http.ResponseWriter, r *http.Request) { |
| paddy@0 | 41 resp := server.NewResponse() |
| paddy@0 | 42 if ar := server.HandleAccessRequest(resp, r); ar != nil { |
| paddy@0 | 43 ar.Authorized = true |
| paddy@0 | 44 server.FinishAccessRequest(resp, r, ar) |
| paddy@0 | 45 } |
| paddy@0 | 46 osin.OutputJSON(resp, w, r) |
| paddy@0 | 47 }) |
| paddy@0 | 48 |
| paddy@0 | 49 http.ListenAndServe(":14000", nil) |
| paddy@0 | 50 ```` |
| paddy@0 | 51 |
| paddy@0 | 52 ### Example Access |
| paddy@0 | 53 |
| paddy@0 | 54 Open in your web browser: |
| paddy@0 | 55 |
| paddy@0 | 56 ```` |
| paddy@0 | 57 http://localhost:14000/authorize?response_type=code&client_id=1234&redirect_url=http%3A%2F%2Flocalhost%3A14000%2Fappauth%2Fcode |
| paddy@0 | 58 ```` |
| paddy@0 | 59 |
| paddy@0 | 60 ### License |
| paddy@0 | 61 |
| paddy@0 | 62 The code is licensed using "New BSD" license. |
| paddy@0 | 63 |
| paddy@0 | 64 ### Author |
| paddy@0 | 65 |
| paddy@0 | 66 Rangel Reale |