public override void ExecuteCmdlet() { base.ExecuteCmdlet(); string resourceUrlOrId; if (ParameterSetName == KnownResourceNameParameterSet) { if (ResourceTypeName == null) { ResourceTypeName = SupportedResourceNames.Arm; } if (!SupportedResourceNames.ResourceNameMap.ContainsKey(ResourceTypeName)) { throw new ArgumentException(Properties.Resources.InvalidResourceTypeName.FormatInvariant(ResourceTypeName), nameof(ResourceTypeName)); } resourceUrlOrId = SupportedResourceNames.ResourceNameMap[ResourceTypeName]; } else { resourceUrlOrId = ResourceUrl; } IAzureContext context = DefaultContext; if (TenantId == null) { TenantId = context.Tenant?.Id; } IAccessToken accessToken = AzureSession.Instance.AuthenticationFactory.Authenticate( context.Account, context.Environment, TenantId, null, ShowDialog.Never, null, null, resourceUrlOrId); var result = new PSAccessToken() { Token = accessToken.AccessToken, TenantId = TenantId, UserId = accessToken.UserId, }; result.ExpiresOn = (accessToken as MsalAccessToken)?.ExpiresOn ?? result.ExpiresOn; WriteObject(result); }
public override void ExecuteCmdlet() { base.ExecuteCmdlet(); string resourceUrlOrId; if (ParameterSetName == KnownResourceNameParameterSet) { if (ResourceTypeName == null) { ResourceTypeName = SupportedResourceNames.Arm; } if (!SupportedResourceNames.ResourceNameMap.ContainsKey(ResourceTypeName)) { throw new ArgumentException(Properties.Resources.InvalidResourceTypeName.FormatInvariant(ResourceTypeName), nameof(ResourceTypeName)); } resourceUrlOrId = SupportedResourceNames.ResourceNameMap[ResourceTypeName]; } else { resourceUrlOrId = ResourceUrl; } IAzureContext context = DefaultContext; if (TenantId == null) { TenantId = context.Tenant?.Id; } IAccessToken accessToken = AzureSession.Instance.AuthenticationFactory.Authenticate( context.Account, context.Environment, TenantId, null, ShowDialog.Never, null, null, resourceUrlOrId); var result = new PSAccessToken() { Token = accessToken.AccessToken, TenantId = TenantId, UserId = accessToken.UserId, }; result.ExpiresOn = (accessToken as MsalAccessToken)?.ExpiresOn ?? result.ExpiresOn; if (result.ExpiresOn == default(DateTimeOffset)) { try { var tokenParts = accessToken.AccessToken.Split('.'); var decodedToken = Base64UrlHelper.DecodeToString(tokenParts[1]); var tokenDocument = JsonDocument.Parse(decodedToken); int expSeconds = tokenDocument.RootElement.EnumerateObject() .Where(p => p.Name == "exp") .Select(p => p.Value.GetInt32()) .First(); result.ExpiresOn = UnixEpoch.AddSeconds(expSeconds); } catch (Exception e)//Ignore exception if fails to parse exp from token { WriteDebug("Unable to parse exp in token: " + e.ToString()); } } WriteObject(result); }