Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
C
canifa_note
Project
Project
Details
Activity
Releases
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
Vũ Hoàng Anh
canifa_note
Commits
204c03e7
Unverified
Commit
204c03e7
authored
Apr 07, 2023
by
boojack
Committed by
GitHub
Apr 07, 2023
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
chore: update audience name (#1484)
parent
d0ddac29
Changes
3
Hide whitespace changes
Inline
Side-by-side
Showing
3 changed files
with
24 additions
and
26 deletions
+24
-26
auth.go
server/auth.go
+3
-3
auth.go
server/auth/auth.go
+13
-14
jwt.go
server/jwt.go
+8
-9
No files found.
server/auth.go
View file @
204c03e7
...
@@ -44,7 +44,7 @@ func (s *Server) registerAuthRoutes(g *echo.Group, secret string) {
...
@@ -44,7 +44,7 @@ func (s *Server) registerAuthRoutes(g *echo.Group, secret string) {
return
echo
.
NewHTTPError
(
http
.
StatusUnauthorized
,
"Incorrect login credentials, please try again"
)
return
echo
.
NewHTTPError
(
http
.
StatusUnauthorized
,
"Incorrect login credentials, please try again"
)
}
}
if
err
:=
GenerateTokensAndSetCookies
(
c
,
user
,
s
.
Profile
.
Mode
,
s
ecret
);
err
!=
nil
{
if
err
:=
GenerateTokensAndSetCookies
(
c
,
user
,
secret
);
err
!=
nil
{
return
echo
.
NewHTTPError
(
http
.
StatusInternalServerError
,
"Failed to generate tokens"
)
.
SetInternal
(
err
)
return
echo
.
NewHTTPError
(
http
.
StatusInternalServerError
,
"Failed to generate tokens"
)
.
SetInternal
(
err
)
}
}
if
err
:=
s
.
createUserAuthSignInActivity
(
c
,
user
);
err
!=
nil
{
if
err
:=
s
.
createUserAuthSignInActivity
(
c
,
user
);
err
!=
nil
{
...
@@ -128,7 +128,7 @@ func (s *Server) registerAuthRoutes(g *echo.Group, secret string) {
...
@@ -128,7 +128,7 @@ func (s *Server) registerAuthRoutes(g *echo.Group, secret string) {
return
echo
.
NewHTTPError
(
http
.
StatusForbidden
,
fmt
.
Sprintf
(
"User has been archived with username %s"
,
userInfo
.
Identifier
))
return
echo
.
NewHTTPError
(
http
.
StatusForbidden
,
fmt
.
Sprintf
(
"User has been archived with username %s"
,
userInfo
.
Identifier
))
}
}
if
err
:=
GenerateTokensAndSetCookies
(
c
,
user
,
s
.
Profile
.
Mode
,
s
ecret
);
err
!=
nil
{
if
err
:=
GenerateTokensAndSetCookies
(
c
,
user
,
secret
);
err
!=
nil
{
return
echo
.
NewHTTPError
(
http
.
StatusInternalServerError
,
"Failed to generate tokens"
)
.
SetInternal
(
err
)
return
echo
.
NewHTTPError
(
http
.
StatusInternalServerError
,
"Failed to generate tokens"
)
.
SetInternal
(
err
)
}
}
if
err
:=
s
.
createUserAuthSignInActivity
(
c
,
user
);
err
!=
nil
{
if
err
:=
s
.
createUserAuthSignInActivity
(
c
,
user
);
err
!=
nil
{
...
@@ -196,7 +196,7 @@ func (s *Server) registerAuthRoutes(g *echo.Group, secret string) {
...
@@ -196,7 +196,7 @@ func (s *Server) registerAuthRoutes(g *echo.Group, secret string) {
if
err
!=
nil
{
if
err
!=
nil
{
return
echo
.
NewHTTPError
(
http
.
StatusInternalServerError
,
"Failed to create user"
)
.
SetInternal
(
err
)
return
echo
.
NewHTTPError
(
http
.
StatusInternalServerError
,
"Failed to create user"
)
.
SetInternal
(
err
)
}
}
if
err
:=
GenerateTokensAndSetCookies
(
c
,
user
,
s
.
Profile
.
Mode
,
s
ecret
);
err
!=
nil
{
if
err
:=
GenerateTokensAndSetCookies
(
c
,
user
,
secret
);
err
!=
nil
{
return
echo
.
NewHTTPError
(
http
.
StatusInternalServerError
,
"Failed to generate tokens"
)
.
SetInternal
(
err
)
return
echo
.
NewHTTPError
(
http
.
StatusInternalServerError
,
"Failed to generate tokens"
)
.
SetInternal
(
err
)
}
}
if
err
:=
s
.
createUserAuthSignUpActivity
(
c
,
user
);
err
!=
nil
{
if
err
:=
s
.
createUserAuthSignUpActivity
(
c
,
user
);
err
!=
nil
{
...
...
server/auth/auth.go
View file @
204c03e7
package
auth
package
auth
import
(
import
(
"fmt"
"strconv"
"strconv"
"time"
"time"
...
@@ -13,13 +12,13 @@ const (
...
@@ -13,13 +12,13 @@ const (
// Signing key section. For now, this is only used for signing, not for verifying since we only
// Signing key section. For now, this is only used for signing, not for verifying since we only
// have 1 version. But it will be used to maintain backward compatibility if we change the signing mechanism.
// have 1 version. But it will be used to maintain backward compatibility if we change the signing mechanism.
keyID
=
"v1"
keyID
=
"v1"
// AccessTokenAudience
Fmt is the format of the acccess token audience
.
// AccessTokenAudience
Name is the audience name of the access token
.
AccessTokenAudience
Fmt
=
"user.access.%s
"
AccessTokenAudience
Name
=
"user.access-token
"
// RefreshTokenAudience
Fmt is the format of the refresh token audience
.
// RefreshTokenAudience
Name is the audience name of the refresh token
.
RefreshTokenAudience
Fmt
=
"user.refresh.%s
"
RefreshTokenAudience
Name
=
"user.refresh-token
"
apiTokenDuration
=
2
*
time
.
Hour
apiTokenDuration
=
2
*
time
.
Hour
accessTokenDuration
=
24
*
time
.
Hour
accessTokenDuration
=
24
*
time
.
Hour
refreshTokenDuration
=
7
*
24
*
time
.
Hour
refreshTokenDuration
=
7
*
24
*
time
.
Hour
// RefreshThresholdDuration is the threshold duration for refreshing token.
// RefreshThresholdDuration is the threshold duration for refreshing token.
RefreshThresholdDuration
=
1
*
time
.
Hour
RefreshThresholdDuration
=
1
*
time
.
Hour
...
@@ -43,21 +42,21 @@ type claimsMessage struct {
...
@@ -43,21 +42,21 @@ type claimsMessage struct {
}
}
// GenerateAPIToken generates an API token.
// GenerateAPIToken generates an API token.
func
GenerateAPIToken
(
userName
string
,
userID
int
,
mode
string
,
secret
string
)
(
string
,
error
)
{
func
GenerateAPIToken
(
userName
string
,
userID
int
,
secret
string
)
(
string
,
error
)
{
expirationTime
:=
time
.
Now
()
.
Add
(
apiTokenDuration
)
expirationTime
:=
time
.
Now
()
.
Add
(
apiTokenDuration
)
return
generateToken
(
userName
,
userID
,
fmt
.
Sprintf
(
AccessTokenAudienceFmt
,
mode
)
,
expirationTime
,
[]
byte
(
secret
))
return
generateToken
(
userName
,
userID
,
AccessTokenAudienceName
,
expirationTime
,
[]
byte
(
secret
))
}
}
// GenerateAccessToken generates an access token for web.
// GenerateAccessToken generates an access token for web.
func
GenerateAccessToken
(
userName
string
,
userID
int
,
mode
string
,
secret
string
)
(
string
,
error
)
{
func
GenerateAccessToken
(
userName
string
,
userID
int
,
secret
string
)
(
string
,
error
)
{
expirationTime
:=
time
.
Now
()
.
Add
(
accessTokenDuration
)
expirationTime
:=
time
.
Now
()
.
Add
(
accessTokenDuration
)
return
generateToken
(
userName
,
userID
,
fmt
.
Sprintf
(
AccessTokenAudienceFmt
,
mode
)
,
expirationTime
,
[]
byte
(
secret
))
return
generateToken
(
userName
,
userID
,
AccessTokenAudienceName
,
expirationTime
,
[]
byte
(
secret
))
}
}
// GenerateRefreshToken generates a refresh token for web.
// GenerateRefreshToken generates a refresh token for web.
func
GenerateRefreshToken
(
userName
string
,
userID
int
,
mode
string
,
secret
string
)
(
string
,
error
)
{
func
GenerateRefreshToken
(
userName
string
,
userID
int
,
secret
string
)
(
string
,
error
)
{
expirationTime
:=
time
.
Now
()
.
Add
(
refreshTokenDuration
)
expirationTime
:=
time
.
Now
()
.
Add
(
refreshTokenDuration
)
return
generateToken
(
userName
,
userID
,
fmt
.
Sprintf
(
RefreshTokenAudienceFmt
,
mode
)
,
expirationTime
,
[]
byte
(
secret
))
return
generateToken
(
userName
,
userID
,
RefreshTokenAudienceName
,
expirationTime
,
[]
byte
(
secret
))
}
}
func
generateToken
(
username
string
,
userID
int
,
aud
string
,
expirationTime
time
.
Time
,
secret
[]
byte
)
(
string
,
error
)
{
func
generateToken
(
username
string
,
userID
int
,
aud
string
,
expirationTime
time
.
Time
,
secret
[]
byte
)
(
string
,
error
)
{
...
...
server/jwt.go
View file @
204c03e7
...
@@ -34,8 +34,8 @@ func getUserIDContextKey() string {
...
@@ -34,8 +34,8 @@ func getUserIDContextKey() string {
}
}
// GenerateTokensAndSetCookies generates jwt token and saves it to the http-only cookie.
// GenerateTokensAndSetCookies generates jwt token and saves it to the http-only cookie.
func
GenerateTokensAndSetCookies
(
c
echo
.
Context
,
user
*
api
.
User
,
mode
string
,
secret
string
)
error
{
func
GenerateTokensAndSetCookies
(
c
echo
.
Context
,
user
*
api
.
User
,
secret
string
)
error
{
accessToken
,
err
:=
auth
.
GenerateAccessToken
(
user
.
Username
,
user
.
ID
,
mode
,
secret
)
accessToken
,
err
:=
auth
.
GenerateAccessToken
(
user
.
Username
,
user
.
ID
,
secret
)
if
err
!=
nil
{
if
err
!=
nil
{
return
errors
.
Wrap
(
err
,
"failed to generate access token"
)
return
errors
.
Wrap
(
err
,
"failed to generate access token"
)
}
}
...
@@ -44,7 +44,7 @@ func GenerateTokensAndSetCookies(c echo.Context, user *api.User, mode string, se
...
@@ -44,7 +44,7 @@ func GenerateTokensAndSetCookies(c echo.Context, user *api.User, mode string, se
setTokenCookie
(
c
,
auth
.
AccessTokenCookieName
,
accessToken
,
cookieExp
)
setTokenCookie
(
c
,
auth
.
AccessTokenCookieName
,
accessToken
,
cookieExp
)
// We generate here a new refresh token and saving it to the cookie.
// We generate here a new refresh token and saving it to the cookie.
refreshToken
,
err
:=
auth
.
GenerateRefreshToken
(
user
.
Username
,
user
.
ID
,
mode
,
secret
)
refreshToken
,
err
:=
auth
.
GenerateRefreshToken
(
user
.
Username
,
user
.
ID
,
secret
)
if
err
!=
nil
{
if
err
!=
nil
{
return
errors
.
Wrap
(
err
,
"failed to generate refresh token"
)
return
errors
.
Wrap
(
err
,
"failed to generate refresh token"
)
}
}
...
@@ -108,7 +108,6 @@ func JWTMiddleware(server *Server, next echo.HandlerFunc, secret string) echo.Ha
...
@@ -108,7 +108,6 @@ func JWTMiddleware(server *Server, next echo.HandlerFunc, secret string) echo.Ha
return
func
(
c
echo
.
Context
)
error
{
return
func
(
c
echo
.
Context
)
error
{
path
:=
c
.
Request
()
.
URL
.
Path
path
:=
c
.
Request
()
.
URL
.
Path
method
:=
c
.
Request
()
.
Method
method
:=
c
.
Request
()
.
Method
mode
:=
server
.
Profile
.
Mode
if
server
.
defaultAuthSkipper
(
c
)
{
if
server
.
defaultAuthSkipper
(
c
)
{
return
next
(
c
)
return
next
(
c
)
...
@@ -145,11 +144,11 @@ func JWTMiddleware(server *Server, next echo.HandlerFunc, secret string) echo.Ha
...
@@ -145,11 +144,11 @@ func JWTMiddleware(server *Server, next echo.HandlerFunc, secret string) echo.Ha
return
nil
,
errors
.
Errorf
(
"unexpected access token kid=%v"
,
t
.
Header
[
"kid"
])
return
nil
,
errors
.
Errorf
(
"unexpected access token kid=%v"
,
t
.
Header
[
"kid"
])
})
})
if
!
audienceContains
(
claims
.
Audience
,
fmt
.
Sprintf
(
auth
.
AccessTokenAudienceFmt
,
mode
)
)
{
if
!
audienceContains
(
claims
.
Audience
,
auth
.
AccessTokenAudienceName
)
{
return
echo
.
NewHTTPError
(
http
.
StatusUnauthorized
,
return
echo
.
NewHTTPError
(
http
.
StatusUnauthorized
,
fmt
.
Sprintf
(
"Invalid access token, audience mismatch, got %q, expected %q. you may send request to the wrong environment"
,
fmt
.
Sprintf
(
"Invalid access token, audience mismatch, got %q, expected %q. you may send request to the wrong environment"
,
claims
.
Audience
,
claims
.
Audience
,
fmt
.
Sprintf
(
auth
.
AccessTokenAudienceFmt
,
mode
)
,
auth
.
AccessTokenAudienceName
,
))
))
}
}
...
@@ -218,17 +217,17 @@ func JWTMiddleware(server *Server, next echo.HandlerFunc, secret string) echo.Ha
...
@@ -218,17 +217,17 @@ func JWTMiddleware(server *Server, next echo.HandlerFunc, secret string) echo.Ha
return
echo
.
NewHTTPError
(
http
.
StatusInternalServerError
,
fmt
.
Sprintf
(
"Server error to refresh expired token. User Id %d"
,
userID
))
.
SetInternal
(
err
)
return
echo
.
NewHTTPError
(
http
.
StatusInternalServerError
,
fmt
.
Sprintf
(
"Server error to refresh expired token. User Id %d"
,
userID
))
.
SetInternal
(
err
)
}
}
if
!
audienceContains
(
refreshTokenClaims
.
Audience
,
fmt
.
Sprintf
(
auth
.
RefreshTokenAudienceFmt
,
mode
)
)
{
if
!
audienceContains
(
refreshTokenClaims
.
Audience
,
auth
.
RefreshTokenAudienceName
)
{
return
echo
.
NewHTTPError
(
http
.
StatusUnauthorized
,
return
echo
.
NewHTTPError
(
http
.
StatusUnauthorized
,
fmt
.
Sprintf
(
"Invalid refresh token, audience mismatch, got %q, expected %q. you may send request to the wrong environment"
,
fmt
.
Sprintf
(
"Invalid refresh token, audience mismatch, got %q, expected %q. you may send request to the wrong environment"
,
refreshTokenClaims
.
Audience
,
refreshTokenClaims
.
Audience
,
fmt
.
Sprintf
(
auth
.
RefreshTokenAudienceFmt
,
mode
)
,
auth
.
RefreshTokenAudienceName
,
))
))
}
}
// If we have a valid refresh token, we will generate new access token and refresh token
// If we have a valid refresh token, we will generate new access token and refresh token
if
refreshToken
!=
nil
&&
refreshToken
.
Valid
{
if
refreshToken
!=
nil
&&
refreshToken
.
Valid
{
if
err
:=
GenerateTokensAndSetCookies
(
c
,
user
,
mode
,
secret
);
err
!=
nil
{
if
err
:=
GenerateTokensAndSetCookies
(
c
,
user
,
secret
);
err
!=
nil
{
return
echo
.
NewHTTPError
(
http
.
StatusInternalServerError
,
fmt
.
Sprintf
(
"Server error to refresh expired token. User Id %d"
,
userID
))
.
SetInternal
(
err
)
return
echo
.
NewHTTPError
(
http
.
StatusInternalServerError
,
fmt
.
Sprintf
(
"Server error to refresh expired token. User Id %d"
,
userID
))
.
SetInternal
(
err
)
}
}
}
}
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment