@@ -46,9 +46,12 @@ public virtual async Async.Task<HttpResponseData> CallIf(HttpRequestData req, Fu
4646 }
4747
4848 var token = tokenResult . OkV . UserInfo ;
49- if ( await IsUser ( tokenResult . OkV ) ) {
49+
50+ var ( isAgent , reason ) = await IsAgent ( tokenResult . OkV ) ;
51+
52+ if ( ! isAgent ) {
5053 if ( ! allowUser ) {
51- return await Reject ( req , token ) ;
54+ return await Reject ( req , token , "endpoint not allowed for users" ) ;
5255 }
5356
5457 var access = await CheckAccess ( req ) ;
@@ -57,26 +60,24 @@ public virtual async Async.Task<HttpResponseData> CallIf(HttpRequestData req, Fu
5760 }
5861 }
5962
60- if ( await IsAgent ( tokenResult . OkV ) && ! allowAgent ) {
61- return await Reject ( req , token ) ;
63+
64+ if ( isAgent && ! allowAgent ) {
65+ return await Reject ( req , token , reason ) ;
6266 }
6367
6468 return await method ( req ) ;
6569 }
6670
67- public async Async . Task < bool > IsUser ( UserAuthInfo tokenData ) {
68- return ! await IsAgent ( tokenData ) ;
69- }
7071
71- public async Async . Task < HttpResponseData > Reject ( HttpRequestData req , UserInfo token ) {
72+ public async Async . Task < HttpResponseData > Reject ( HttpRequestData req , UserInfo token , String ? reason = null ) {
7273 var body = await req . ReadAsStringAsync ( ) ;
73- _log . Error ( $ "reject token. url:{ req . Url : Tag:Url} token:{ token : Tag:Token} body:{ body : Tag:Body} ") ;
74+ _log . Error ( $ "reject token. reason: { reason } url:{ req . Url : Tag:Url} token:{ token : Tag:Token} body:{ body : Tag:Body} ") ;
7475
7576 return await _context . RequestHandling . NotOk (
7677 req ,
7778 new Error (
7879 ErrorCode . UNAUTHORIZED ,
79- new string [ ] { "Unrecognized agent" }
80+ new string [ ] { reason ?? "Unrecognized agent" }
8081 ) ,
8182 "token verification" ,
8283 HttpStatusCode . Unauthorized
@@ -186,34 +187,35 @@ private GroupMembershipChecker CreateGroupMembershipChecker(InstanceConfig confi
186187 return null ;
187188 }
188189
189- public async Async . Task < bool > IsAgent ( UserAuthInfo authInfo ) {
190+
191+ public async Async . Task < ( bool , string ) > IsAgent ( UserAuthInfo authInfo ) {
190192 if ( ! AgentRoles . Overlaps ( authInfo . Roles ) ) {
191- return false ;
193+ return ( false , "no agent role" ) ;
192194 }
193195
194196 var tokenData = authInfo . UserInfo ;
195197
196198 if ( tokenData . ObjectId != null ) {
197199 var scalesets = _context . ScalesetOperations . GetByObjectId ( tokenData . ObjectId . Value ) ;
198200 if ( await scalesets . AnyAsync ( ) ) {
199- return true ;
201+ return ( true , string . Empty ) ;
200202 }
201203
202204 var principalId = await _context . Creds . GetScalesetPrincipalId ( ) ;
203205 if ( principalId == tokenData . ObjectId ) {
204- return true ;
206+ return ( true , string . Empty ) ;
205207 }
206208 }
207209
208- if ( ! tokenData . ApplicationId . HasValue ) {
209- return false ;
210+ if ( ! tokenData . ObjectId . HasValue ) {
211+ return ( false , "no object id in token" ) ;
210212 }
211213
212- var pools = _context . PoolOperations . GetByClientId ( tokenData . ApplicationId . Value ) ;
214+ var pools = _context . PoolOperations . GetByObjectId ( tokenData . ObjectId . Value ) ;
213215 if ( await pools . AnyAsync ( ) ) {
214- return true ;
216+ return ( true , string . Empty ) ;
215217 }
216218
217- return false ;
219+ return ( false , "no matching scaleset or pool" ) ;
218220 }
219221}
0 commit comments