func generateJWT(subject, scope string, core *roll.Core, app *roll.Application) (string, error) { privateKey, err := core.RetrievePrivateKeyForApp(app.ClientID) if err != nil { return "", err } token, err := rolltoken.GenerateToken(subject, scope, app.ClientID, app.ApplicationName, privateKey) return token, err }
func TestInvalidSignature(t *testing.T) { app := roll.Application{ DeveloperEmail: "*****@*****.**", ClientID: "1111-2222-3333333-4444444", ApplicationName: "fight club", ClientSecret: "not for browser clients", RedirectURI: "http://localhost:3000/ab", LoginProvider: "xtrac://localhost:9000", } appRepoMock := new(mocks.ApplicationRepo) appRepoMock.On("RetrieveApplication", "1111-2222-3333333-4444444").Return(&app, nil) privateKey, publicKey, err := secrets.GenerateKeyPair() assert.Nil(t, err) private2, _, err := secrets.GenerateKeyPair() assert.Nil(t, err) secretsMock := new(mocks.SecretsRepo) secretsMock.On("RetrievePrivateKeyForApp", "1111-2222-3333333-4444444").Return(privateKey, nil) secretsMock.On("RetrievePublicKeyForApp", "1111-2222-3333333-4444444").Return(publicKey, nil) adminRepo := new(mocks.AdminRepo) token, err := rolltoken.GenerateToken("b-subject", "", app.ClientID, app.ApplicationName, private2) assert.Nil(t, err) testServer := httptest.NewServer(Wrap(secretsMock, adminRepo, []string{}, echoHandler())) defer testServer.Close() client := http.Client{} req, err := http.NewRequest("POST", testServer.URL, nil) assert.Nil(t, err) req.Header.Add("Authorization", "Bearer "+token) resp, err := client.Do(req) assert.Nil(t, err) assert.Equal(t, http.StatusUnauthorized, resp.StatusCode) }
func TestValidAccessToken(t *testing.T) { core, coreConfig := NewTestCore() ln, addr := TestServer(t, core) defer ln.Close() returnVal := roll.Application{ DeveloperEmail: "*****@*****.**", ClientID: "1111-2222-3333333-4444444", ApplicationName: "fight club", ClientSecret: "not for browser clients", RedirectURI: "http://localhost:3000/ab", LoginProvider: "xtrac://localhost:9000", } appRepoMock := coreConfig.ApplicationRepo.(*mocks.ApplicationRepo) appRepoMock.On("RetrieveApplication", "1111-2222-3333333-4444444").Return(&returnVal, nil) privateKey, publicKey, err := secrets.GenerateKeyPair() assert.Nil(t, err) secretsMock := coreConfig.SecretsRepo.(*mocks.SecretsRepo) secretsMock.On("RetrievePrivateKeyForApp", "1111-2222-3333333-4444444").Return(privateKey, nil) secretsMock.On("RetrievePublicKeyForApp", "1111-2222-3333333-4444444").Return(publicKey, nil) token, err := rolltoken.GenerateToken("a-subject", "", returnVal.ClientID, returnVal.ApplicationName, privateKey) assert.Nil(t, err) resp, err := http.Get(addr + TokenInfoURI + "?access_token=" + token) assert.Nil(t, err) assert.Equal(t, http.StatusOK, resp.StatusCode) body := responseAsString(t, resp) var ti tokenInfo err = json.Unmarshal([]byte(body), &ti) assert.Nil(t, err) assert.Equal(t, "1111-2222-3333333-4444444", ti.Audience) }