claims_test.go 3.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172
  1. package auth
  2. import (
  3. "context"
  4. "github.com/Nerzal/gocloak/v13"
  5. "github.com/Nerzal/gocloak/v13/pkg/jwx"
  6. "os"
  7. "reflect"
  8. "testing"
  9. )
  10. var cli = gocloak.NewClient(os.Getenv("JWT_ISSUER"))
  11. func TestDecodeClaims(t *testing.T) {
  12. tests := []struct {
  13. token string
  14. realm string
  15. want *Claims
  16. wantErr bool
  17. }{
  18. {
  19. token: "eyJhbGciOiJSUzI1NiIsInR5cCIgOiAiSldUIiwia2lkIiA6ICJzTEFaZEJKUF93OHdZRWI4aDlQNmxNSTltSS1WMlNCX1JRREpmZG5Qek1JIn0.eyJleHAiOjE2OTQ0MDY4MzUsImlhdCI6MTY5NDQwNjUzNSwianRpIjoiMjMzODg1MjAtNmQ5Yi00ZTNiLTkzODItYTk5NWQ1MGZiMzI2IiwiaXNzIjoiaHR0cDovLzIwLjIxMC4xMTUuMjQ1L3JlYWxtcy8zMmE4MzQ4Ni0xNTMwLTUwN2MtYWRkNy1kOTdmNDMxNmIyOGIiLCJhdWQiOiJhY2NvdW50Iiwic3ViIjoiM2U1NmQxYjMtNjBkMy00OWQxLWExNzQtZDY5Y2ZhNjI1NDE4IiwidHlwIjoiQmVhcmVyIiwiYXpwIjoibWFzdGVyIiwic2Vzc2lvbl9zdGF0ZSI6ImQxMTg2YmE2LWQyYzEtNGRiZC04MjNiLTJiODM4ZGE0OWVhMCIsImFjciI6IjEiLCJhbGxvd2VkLW9yaWdpbnMiOlsiKiJdLCJyZWFsbV9hY2Nlc3MiOnsicm9sZXMiOlsib2ZmbGluZV9hY2Nlc3MiLCJ1bWFfYXV0aG9yaXphdGlvbiIsImRlZmF1bHQtcm9sZXMtZGVtbyJdfSwicmVzb3VyY2VfYWNjZXNzIjp7ImFjY291bnQiOnsicm9sZXMiOlsibWFuYWdlLWFjY291bnQiLCJtYW5hZ2UtYWNjb3VudC1saW5rcyIsInZpZXctcHJvZmlsZSJdfX0sInNjb3BlIjoib3BlbmlkIGVtYWlsIHByb2ZpbGUiLCJzaWQiOiJkMTE4NmJhNi1kMmMxLTRkYmQtODIzYi0yYjgzOGRhNDllYTAiLCJlbWFpbF92ZXJpZmllZCI6ZmFsc2UsInByZWZlcnJlZF91c2VybmFtZSI6ImJlZWpheSJ9.UGJf4utoJAUL0TzaaRwiAew_r5movdt_zrQab0wUt7kfIeV-3x8VPegeHSwKpc3Aera7RPjGjQMF4_rPgxjowMNXKPVY3kxIj0g9Mx0A80t3-iUcYuVzRYYqw0WUEDonFxWSo1i4kbuZeBv55Q3mHNYp_umKn_Fp2AzH3o1vLQoBLoX1_zj9MjljFTJtwAjHQ96AYHfO0lc-gREJFdFOSlNNvNXYlAZott_3vilhbGu0JhbpHmNgIibnNFsV444K0toa2BeMrcr-dL09FKVb0mcZt3lj5UfHF2BXDJSsrL0nUXgb7ZoBKjaGDqkvL8GFViDr7wRpiFABBBWwAQyaNA",
  20. realm: "32a83486-1530-507c-add7-d97f4316b28b",
  21. want: &Claims{
  22. Acr: "1",
  23. AllowedOrigins: []string{"*"},
  24. Aud: "account",
  25. Azp: "master",
  26. EmailVerified: false,
  27. ExpiresAr: 1694406835,
  28. IssuedAt: 1694406535,
  29. Issuer: "http://20.210.115.245/realms/32a83486-1530-507c-add7-d97f4316b28b",
  30. Jti: "b489568f-5236-4c97-aa81-172cf18036bc",
  31. Username: "beejay",
  32. RealmAccess: jwx.RealmAccess{
  33. Roles: []string{"offline_access", "uma_authorization", "default-roles-demo"},
  34. },
  35. ResourceAccess: jwx.ResourceAccess{
  36. Account: jwx.Account{
  37. Roles: []string{"manage-account", "manage-account-links", "view-profile"},
  38. },
  39. },
  40. Scope: "openid email profile",
  41. SessionState: "d1186ba6-d2c1-4dbd-823b-2b838da49ea0",
  42. Sid: "d1186ba6-d2c1-4dbd-823b-2b838da49ea0",
  43. Sub: "3e56d1b3-60d3-49d1-a174-d69cfa625418",
  44. Typ: "Bearer",
  45. },
  46. wantErr: false,
  47. },
  48. }
  49. for _, tt := range tests {
  50. t.Run("TestDecodeClaims", func(t *testing.T) {
  51. token, _, err := cli.DecodeAccessToken(context.TODO(), tt.token, tt.realm)
  52. if (err != nil) != tt.wantErr {
  53. t.Errorf("DecodeClaims() error = %v, wantErr %v", err, tt.wantErr)
  54. return
  55. }
  56. got, err := DecodeClaims(token)
  57. if (err != nil) != tt.wantErr {
  58. t.Errorf("DecodeClaims() error = %v, wantErr %v", err, tt.wantErr)
  59. return
  60. }
  61. if !reflect.DeepEqual(got, tt.want) {
  62. t.Errorf("DecodeClaims() got = %v, want %v", got, tt.want)
  63. }
  64. })
  65. }
  66. }