1
- using System . Management . Automation ;
1
+ using System . Management . Automation ;
2
2
using Microsoft . VisualStudio . Services . Common ;
3
3
using System . Net ;
4
4
using Microsoft . VisualStudio . Services . Client ;
@@ -19,6 +19,18 @@ partial class NewCredential
19
19
/// </summary>
20
20
[ Parameter ( Position = 0 , Mandatory = true ) ]
21
21
public Uri Url { get ; set ; }
22
+
23
+ /// <summary>
24
+ /// Specifies that the credentials should be obtained from the currently logged in Azure CLI user.
25
+ /// </summary>
26
+ [ Parameter ( Mandatory = false ) ]
27
+ public SwitchParameter AzCli { get ; set ; }
28
+
29
+ /// <summary>
30
+ /// Specifies that the credentials should be obtained from the Azure Managed Identity present in the current script context.
31
+ /// </summary>
32
+ [ Parameter ( Mandatory = false ) ]
33
+ public SwitchParameter UseMSI { get ; set ; }
22
34
}
23
35
24
36
[ CmdletController ( typeof ( VssCredentials ) , CustomCmdletName = "NewCredential" ) ]
@@ -27,6 +39,9 @@ partial class GetCredentialController
27
39
[ Import ]
28
40
private IInteractiveAuthentication InteractiveAuthentication { get ; }
29
41
42
+ [ Import ]
43
+ private IAzCliAuthentication AzCliAuthentication { get ; }
44
+
30
45
protected override IEnumerable Run ( )
31
46
{
32
47
var connectionMode = ConnectionMode . CachedCredentials ;
@@ -39,6 +54,10 @@ protected override IEnumerable Run()
39
54
connectionMode = ConnectionMode . AccessToken ;
40
55
else if ( Interactive )
41
56
connectionMode = ConnectionMode . Interactive ;
57
+ else if ( AzCli )
58
+ connectionMode = ConnectionMode . AzCli ;
59
+ else if ( UseMSI )
60
+ connectionMode = ConnectionMode . UseMSI ;
42
61
43
62
NetworkCredential netCred = null ;
44
63
@@ -124,6 +143,24 @@ protected override IEnumerable Run()
124
143
throw new Exception ( "Interactive authentication is not supported for TFS / Azure DevOps Server in PowerShell Core. Please use either a username/password credential or a Personal Access Token." ) ;
125
144
}
126
145
146
+ case ConnectionMode . AzCli :
147
+ {
148
+ Logger . Log ( "Using Azure CLI credential" ) ;
149
+
150
+ yield return new VssCredentials (
151
+ new VssOAuthAccessTokenCredential ( AzCliAuthentication . GetToken ( Url ) ) ) ;
152
+ break ;
153
+ }
154
+
155
+ case ConnectionMode . UseMSI :
156
+ {
157
+ Logger . Log ( "Using Managed Identity credential" ) ;
158
+
159
+ yield return new VssCredentials (
160
+ new VssOAuthAccessTokenCredential ( AzCliAuthentication . GetToken ( Url , useMsi : true ) ) ) ;
161
+ break ;
162
+ }
163
+
127
164
default :
128
165
{
129
166
throw new Exception ( $ "Invalid parameter set '{ connectionMode } '") ;
@@ -150,7 +187,9 @@ private enum ConnectionMode
150
187
CredentialObject ,
151
188
UserNamePassword ,
152
189
AccessToken ,
153
- Interactive
190
+ Interactive ,
191
+ AzCli ,
192
+ UseMSI
154
193
}
155
194
}
156
- }
195
+ }
0 commit comments