security/utils.go
func DecodeOAuth2Code(code, sharedKey string) (response Response, err error) {
	object, err := jose.ParseSigned(code)
	if err != nil {
		return
	}
	output, err := object.Verify([]byte(sharedKey))
	if err != nil {
		return
	}
	base64Text := make([]byte, base64.StdEncoding.DecodedLen(len(output)))
	l, err := base64.StdEncoding.Decode(base64Text, output)
	if err != nil {
		return
	}
	response = Response{}
	err = json.Unmarshal(base64Text[:l], &response)
	return
}
func DecodeOAuth2Code(code, sharedKey string) (response Response, err error) {
	object, err := jose.ParseSigned(code)
	if err != nil {
		return
	}
	output, err := object.Verify([]byte(sharedKey))
	if err != nil {
		return
	}
	base64Text := make([]byte, base64.StdEncoding.DecodedLen(len(output)))
	l, err := base64.StdEncoding.Decode(base64Text, output)
	if err != nil {
		return
	}
	response = Response{}
	err = json.Unmarshal(base64Text[:l], &response)
	return
}
//DecodeOAuth2Code inverse of EncodeOAuth2Code