/// <summary> /// 【异步方法】获取或更新AuthorizationInfo。 /// 如果读取refreshToken失败,则返回null。 /// </summary> /// <param name="componentAppId"></param> /// <param name="authorizerAppid"></param> /// <param name="getNewTicket"></param> /// <returns></returns> public static async Task <AuthorizationInfo> GetAuthorizationInfoAsync(string componentAppId, string authorizerAppid, bool getNewTicket = false) { TryRegister(componentAppId, authorizerAppid); var authorizerBag = TryGetItem(authorizerAppid); using (Cache.BeginCacheLock(LockResourceName + ".GetAuthorizationInfo", authorizerAppid))//同步锁 { //更新Authorization if (getNewTicket || authorizerBag.AuthorizationInfoExpireTime <= DateTime.Now) { var componentVerifyTicket = ComponentContainer.TryGetComponentVerifyTicket(componentAppId); var componentAccessToken = await ComponentContainer.GetComponentAccessTokenAsync(componentAppId, componentVerifyTicket); //获取新的AuthorizerAccessToken var refreshToken = ComponentContainer.GetAuthorizerRefreshTokenFunc(componentAppId, authorizerAppid); if (refreshToken == null) { return(null); } var refreshResult = await RefreshAuthorizerTokenAsync(componentAccessToken, componentAppId, authorizerAppid, refreshToken); //更新数据 TryUpdateAuthorizationInfo(componentAppId, authorizerAppid, refreshResult.authorizer_access_token, refreshResult.authorizer_refresh_token, refreshResult.expires_in); authorizerBag = TryGetItem(authorizerAppid);//外部缓存需要重新获取新数据 } } return(authorizerBag.AuthorizationInfo); }