Skip to content

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

@theophoric

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

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions