Skip to content

Add "getTokenInfo(accessToken) => TokenInfo" method to UsersUAA #15

Description

@theophoric

Add method to decode access token into username, email, and user guid. user guid is required for management / permission calls.

from the go implementation:

type TokenInfo struct {
    Username string `json:"user_name"`
    Email    string `json:"email"`
    UserGuid string `json:"user_id"`
}

func NewTokenInfo(accessToken string) (info TokenInfo) {
    tokenJson, err := DecodeAccessToken(accessToken)
    if err != nil {
        return TokenInfo{}
    }

    info = TokenInfo{}
    err = json.Unmarshal(tokenJson, &info)
    if err != nil {
        return TokenInfo{}
    }

    return info
}

func DecodeAccessToken(accessToken string) (tokenJson []byte, err error) {
    tokenParts := strings.Split(accessToken, " ")

    if len(tokenParts) < 2 {
        return
    }

    token := tokenParts[1]
    encodedParts := strings.Split(token, ".")

    if len(encodedParts) < 3 {
        return
    }

    encodedTokenJson := encodedParts[1]
    return base64Decode(encodedTokenJson)
}

func base64Decode(encodedData string) ([]byte, error) {
    return base64.StdEncoding.DecodeString(restorePadding(encodedData))
}

func restorePadding(seg string) string {
    switch len(seg) % 4 {
    case 2:
        seg = seg + "=="
    case 3:
        seg = seg + "="
    }
    return seg
}

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type
    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions