28
28
using System . Management . Automation ;
29
29
using Microsoft . Azure . Commands . Profile . Properties ;
30
30
using Azure . Identity ;
31
+ using Microsoft . Azure . Commands . Common . Authentication . Abstractions . Interfaces ;
32
+ using Microsoft . Azure . Commands . Common . Authentication . Abstractions . Extensions ;
33
+ using Microsoft . Azure . Commands . Common . Authentication . Factories ;
31
34
32
35
namespace Microsoft . Azure . Commands . Common
33
36
{
@@ -75,7 +78,7 @@ public void OnNewRequest(InvocationInfo invocationInfo, string correlationId, st
75
78
{
76
79
prependStep ( UniqueId . Instance . SendAsync ) ;
77
80
appendStep ( new UserAgent ( invocationInfo ) . SendAsync ) ;
78
- appendStep ( this . SendHandler ( GetDefaultContext ( _provider , invocationInfo ) , AzureEnvironment . Endpoint . ActiveDirectoryServiceEndpointResourceId ) ) ;
81
+ appendStep ( this . SendHandler ( GetDefaultContext ( _provider , invocationInfo ) , AzureEnvironment . Endpoint . ActiveDirectoryServiceEndpointResourceId , new AzureCmdletContext ( correlationId ) ) ) ;
79
82
}
80
83
81
84
internal void AddRequestUserAgentHandler (
@@ -118,7 +121,12 @@ internal void AddAuthorizeRequestHandler(
118
121
{
119
122
endpointResourceIdKey = endpointResourceIdKey ?? AzureEnvironment . Endpoint . ActiveDirectoryServiceEndpointResourceId ;
120
123
var context = GetDefaultContext ( _provider , invocationInfo ) ;
121
- return await AuthenticationHelper ( context , endpointResourceIdKey , endpointSuffixKey , request , cancelToken , cancelAction , signal , next ) ;
124
+ ICmdletContext cmdletContext = AzureCmdletContext . CmdletNone ;
125
+ if ( extensibleParameters . ContainsKey ( AuthenticationFactory . CmdletContextParameterName ) )
126
+ {
127
+ cmdletContext = extensibleParameters [ AuthenticationFactory . CmdletContextParameterName ] as ICmdletContext ;
128
+ }
129
+ return await AuthenticationHelper ( context , endpointResourceIdKey , endpointSuffixKey , request , cancelToken , cancelAction , signal , next , cmdletContext ) ;
122
130
} ) ;
123
131
}
124
132
@@ -193,9 +201,10 @@ public object GetParameterValue(string resourceId, string moduleName, Invocation
193
201
return string . Empty ;
194
202
}
195
203
196
- internal async Task < HttpResponseMessage > AuthenticationHelper ( IAzureContext context , string endpointResourceIdKey , string endpointSuffixKey , HttpRequestMessage request , CancellationToken cancelToken , Action cancelAction , SignalDelegate signal , NextDelegate next , TokenAudienceConverterDelegate tokenAudienceConverter = null )
204
+ internal async Task < HttpResponseMessage > AuthenticationHelper ( IAzureContext context , string endpointResourceIdKey , string endpointSuffixKey , HttpRequestMessage request , CancellationToken cancelToken , Action cancelAction , SignalDelegate signal , NextDelegate next , ICmdletContext cmdletContext , TokenAudienceConverterDelegate tokenAudienceConverter = null )
197
205
{
198
- IAccessToken accessToken = await AuthorizeRequest ( context , request , cancelToken , endpointResourceIdKey , endpointSuffixKey , tokenAudienceConverter ) ;
206
+ var extensiableParameters = cmdletContext ? . ToExtensibleParameters ( ) ;
207
+ IAccessToken accessToken = await AuthorizeRequest ( context , request , cancelToken , endpointResourceIdKey , endpointSuffixKey , tokenAudienceConverter , extensiableParameters ) ;
199
208
using ( var newRequest = await request . CloneWithContent ( request . RequestUri , request . Method ) )
200
209
{
201
210
var response = await next ( request , cancelToken , cancelAction , signal ) ;
@@ -232,13 +241,14 @@ internal async Task<HttpResponseMessage> AuthenticationHelper(IAzureContext cont
232
241
/// </summary>
233
242
/// <param name="context"></param>
234
243
/// <param name="resourceId"></param>
244
+ /// <param name="cmdletContext"></param>
235
245
/// <returns></returns>
236
- internal Func < HttpRequestMessage , CancellationToken , Action , SignalDelegate , NextDelegate , Task < HttpResponseMessage > > SendHandler ( IAzureContext context , string resourceId )
246
+ internal Func < HttpRequestMessage , CancellationToken , Action , SignalDelegate , NextDelegate , Task < HttpResponseMessage > > SendHandler ( IAzureContext context , string resourceId , ICmdletContext cmdletContext )
237
247
{
238
248
return async ( request , cancelToken , cancelAction , signal , next ) =>
239
249
{
240
250
PatchRequestUri ( context , request ) ;
241
- return await AuthenticationHelper ( context , resourceId , resourceId , request , cancelToken , cancelAction , signal , next ) ;
251
+ return await AuthenticationHelper ( context , resourceId , resourceId , request , cancelToken , cancelAction , signal , next , cmdletContext ) ;
242
252
} ;
243
253
}
244
254
@@ -249,12 +259,12 @@ internal Func<HttpRequestMessage, CancellationToken, Action, SignalDelegate, Nex
249
259
/// <param name="endpointResourceIdKey"></param>
250
260
/// <param name="request"></param>
251
261
/// <param name="endpointSuffixKey"></param>
252
- /// <param name="extensibleParamters "></param>
262
+ /// <param name="extensibleParameters "></param>
253
263
/// <param name="tokenAudienceConverter"></param>
254
264
/// <param name="cancellationToken"></param>
255
265
/// <returns></returns>
256
266
internal async Task < IAccessToken > AuthorizeRequest ( IAzureContext context , HttpRequestMessage request , CancellationToken cancellationToken , string endpointResourceIdKey ,
257
- string endpointSuffixKey , TokenAudienceConverterDelegate tokenAudienceConverter = null , IDictionary < string , object > extensibleParamters = null )
267
+ string endpointSuffixKey , TokenAudienceConverterDelegate tokenAudienceConverter = null , IDictionary < string , object > extensibleParameters = null )
258
268
{
259
269
if ( context == null || context . Account == null || context . Environment == null )
260
270
{
@@ -269,7 +279,12 @@ internal async Task<IAccessToken> AuthorizeRequest(IAzureContext context, HttpRe
269
279
var tokenAudience = tokenAudienceConverter . Invoke ( info . CurEnvEndpointResourceId , info . CurEnvEndpointSuffix , info . BaseEnvEndpointResourceId , info . BaseEnvEndpointSuffix , request . RequestUri ) ;
270
280
endpointResourceIdKey = tokenAudience ?? endpointResourceIdKey ;
271
281
}
272
- var authToken = _authenticator . Authenticate ( context . Account , context . Environment , context . Tenant . Id , null , "Never" , null , endpointResourceIdKey ) ;
282
+ var optionalParameters = new Dictionary < string , object > ( ) { { AuthenticationFactory . ResourceIdParameterName , endpointResourceIdKey } } ;
283
+ if ( extensibleParameters != null && extensibleParameters . ContainsKey ( AuthenticationFactory . CmdletContextParameterName ) )
284
+ {
285
+ optionalParameters . Add ( AuthenticationFactory . CmdletContextParameterName , extensibleParameters [ AuthenticationFactory . CmdletContextParameterName ] ) ;
286
+ }
287
+ var authToken = _authenticator . Authenticate ( context . Account , context . Environment , context . Tenant . Id , null , "Never" , null , optionalParameters ) ;
273
288
authToken . AuthorizeRequest ( ( type , token ) => request . Headers . Authorization = new System . Net . Http . Headers . AuthenticationHeaderValue ( type , token ) ) ;
274
289
return authToken ;
275
290
} , cancellationToken ) ;
0 commit comments