예제 #1
0
        public async Task <GrantedToken?> GetToken(
            string scopes,
            string clientId,
            JwtPayload?idTokenJwsPayload,
            JwtPayload?userInfoJwsPayload,
            CancellationToken cancellationToken = default)
        {
            var token = await _database.StringGetAsync(clientId + scopes).ConfigureAwait(false);

            var options = token.HasValue
                ? JsonConvert.DeserializeObject <GrantedToken[]>(token) !
                : Array.Empty <GrantedToken>();

            return(options.FirstOrDefault(
                       x =>
            {
                var hasSameIdToken = (idTokenJwsPayload == null && x.IdTokenPayLoad == null) ||
                                     idTokenJwsPayload?.All(a => x.IdTokenPayLoad?.Contains(a) == true) == true;
                var hasSameUserInfoToken = (userInfoJwsPayload == null && x.UserInfoPayLoad == null) ||
                                           userInfoJwsPayload?.All(a => x.UserInfoPayLoad?.Contains(a) == true)
                                           == true;
                return hasSameIdToken && hasSameUserInfoToken;
            }));
        }