auth

Paddy 2015-05-15 Parent:de5e09680f6b

168:581c60f8dd23 Go to Latest

auth/authd/templates/simple.gotmpl

Switch to a JWT approach. We're going to use a JWT as our access tokens (as discussed in &yet's excellent post https://blog.andyet.com/2015/05/12/micro-services-user-info-and-auth and my ensuing conversation with Fritzy). The benefit of this approach is that we can do authentication and even some authorization without touching the database at all. The drawback is that we can no longer revoke access tokens, only the refresh tokens that grant the access tokens. We need a new config variable to set our private key, used to sign the JWT. We get to remove our token handlers, as we no longer can revoke tokens, so there's no purpose in getting information about it or listing them. Our tokenStore revokeToken gets to be simplified, as it will only ever be used for refresh tokens now. We also updated our postgres and memstore implementations. We added a helper method for generating the signed "access token" (our JWT) and started using it in the places where we're creating a Token. We get to remove the `revoked` SQL column for the tokens table, and rename the `refresh_revoked` column to just be `revoked`. We shortened our access token expiration to 15 minutes instead of an hour, to deal with the token not being revokable.

History
paddy@100 1 {{ define "login" }}<html>
paddy@100 2 <head>
paddy@100 3 <title>Log in</title>
paddy@100 4 </head>
paddy@100 5 <body>
paddy@100 6 <h1>Please log into your account</h1>{{ if .errors }}
paddy@100 7 <h2>Errors:</h2>
paddy@100 8 <ul>{{ range .errors }}
paddy@100 9 <li>{{ . }}</li>
paddy@100 10 </ul>{{ end }}{{ end }}
paddy@100 11 <form method="POST">
paddy@100 12 <p>Username: <input type="text" name="login"></p>
paddy@100 13 <p>Password: <input type="password" name="passphrase"></p>
paddy@100 14 <p><input type="submit"></p>
paddy@100 15 </form>
paddy@100 16 </body>
paddy@100 17 </html>{{ end }}
paddy@106 18
paddy@106 19 {{ define "get_grant" }}<html>
paddy@106 20 <head>
paddy@106 21 <title>Grant access</title>
paddy@106 22 </head>
paddy@106 23 <body>{{ if .error }}
paddy@106 24 <h1>Error</h1>
paddy@106 25 <p>{{ .error }}</p>{{ end }}{{ if .internal_error }}
paddy@106 26 <h1>Error</h1>
paddy@106 27 <p>{{ .internal_error }}</p>{{ end }}{{ if not .error }}{{ if not .internal_error }}<h1>Grant access</h1>
paddy@152 28 <p>{{ .client.Name }} is requesting access to your account. if you grant it, you'll be redirected to {{ .redirectURL }}.{{ if .scopes }} Their access will be limited to:</p>
paddy@152 29 <ul>{{ range .scopes }}
paddy@152 30 <li>{{ .Name }}{{ if .Description }}: {{ .Description }}{{ end }}</li>{{ end }}
paddy@152 31 </ul>{{ end }}
paddy@152 32 <p>You are granting access for {{ .profile.Name }}.</p>{{ end }}{{ end }}
paddy@108 33 <form method="POST">
paddy@108 34 <input type="submit" name="grant" value="approved">
paddy@132 35 <input type="hidden" name="csrftoken" value="{{ .csrftoken }}">
paddy@108 36 </form>
paddy@106 37 </body>
paddy@106 38 </html>{{ end }}