首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在没有user_impersonation OAuth2Permission的情况下创建一个新的Azure应用程序注册?

如何在没有user_impersonation OAuth2Permission的情况下创建一个新的Azure应用程序注册?
EN

Stack Overflow用户
提问于 2020-07-02 08:15:44
回答 3查看 2.4K关注 0票数 5

我在想,阿杜尔大师中是否有人能澄清New-AzureADApplication的行为。当我在PowerShell中创建应用程序注册时,它似乎在GUI中的Expose and API > Scopes defined by this API下添加了一个user_impersonation。当我在GUI中创建应用程序注册时,我为它提供了一个名称,并在必要时提供了一个重定向URI,但是这个user_impersonation作用域没有创建。

我认为这可能与AzureAD模块有关,它与Azure有特定的连接,但在使用New-AzADApplication时它的行为是相同的,但这个cmdlet也需要指定-IdentifierUris --对于我们注册的所有应用来说,这并不是必要的。

在我通过OAuth2Permissions创建应用程序注册时,是否要避免添加PowerShell?

我尝试过的其他事情:

  • -OAuth2Permissions设置为[System.Collections.Generic.List`1[Microsoft.Open.AzureAD.Model.OAuth2Permission,Microsoft.Open.AzureAD16.Graph.Client、Version=0.1.599.7、Culture=neutral、PublicKeyToken=null类型的空列表]
  • 使用Get-AzureADOAuth2PermissionGrant尝试查找权限并在之后删除它。它不在那里。

如果我在创建时无法避免或删除它,请提供以下信息:

  • 为什么默认情况下必须使用此权限。
  • 为什么GUI不认为它是必要的。

示例:

代码语言:javascript
复制
Connect-AzureAD
$GraphRead = Get-AzureADServicePrincipal -All $true | Where-Object {$_.AppId -eq '00000003-0000-0000-c000-000000000000'}
$RRA = New-Object -TypeName "Microsoft.Open.AzureAD.Model.RequiredResourceAccess"
$RRA.ResourceAppId = $GraphRead.AppId
$ResAcc = New-Object -TypeName "microsoft.open.azuread.model.resourceAccess" -ArgumentList "e1fe6dd8-ba31-4d61-89e7-88639da4683d", "Scope"
$RRA.ResourceAccess = $ResAcc
$Test = New-AzureADApplication -DisplayName "PoshTest" -ReplyUrls "https://visualstudio/spn" -RequiredResourceAccess @($RRA)

对象:

代码语言:javascript
复制
$Test | FL *

DeletionTimestamp          : 
ObjectId                   : ************************************
ObjectType                 : Application
AddIns                     : {}
AppId                      : ************************************
AppRoles                   : {}
AvailableToOtherTenants    : False
DisplayName                : PoshTest
ErrorUrl                   : 
GroupMembershipClaims      : 
Homepage                   : 
IdentifierUris             : {}
KeyCredentials             : {}
KnownClientApplications    : {}
LogoutUrl                  : 
Oauth2AllowImplicitFlow    : False
Oauth2AllowUrlPathMatching : False
Oauth2Permissions          : {class OAuth2Permission {
                               AdminConsentDescription: Allow the application to access PoshTest on behalf of the 
                             signed-in user.
                               AdminConsentDisplayName: Access PoshTest
                               Id: ************************************
                               IsEnabled: True
                               Type: User
                               UserConsentDescription: Allow the application to access PoshTest on your behalf.
                               UserConsentDisplayName: Access PoshTest
                               Value: user_impersonation
                             }
                             }
Oauth2RequirePostResponse  : False
PasswordCredentials        : {}
PublicClient               : 
RecordConsentConditions    : 
ReplyUrls                  : {https://visualstudio/spn}
RequiredResourceAccess     : {class RequiredResourceAccess {
                               ResourceAppId: 00000003-0000-0000-c000-000000000000
                               ResourceAccess: 
                             System.Collections.Generic.List`1[Microsoft.Open.AzureAD.Model.ResourceAccess]
                             }
                             }
SamlMetadataUrl            : 

PowerShell Details

代码语言:javascript
复制
$PSVersionTable | select PSVersion,PSEdition,OS,Platform | FL *

PSVersion : 7.0.2
PSEdition : Core
OS        : Darwin 18.7.0 Darwin Kernel Version 18.7.0: Mon Apr 27 20:09:39 PDT 2020; 
            root:xnu-4903.278.35~1/RELEASE_X86_64
Platform  : Unix

Get-Module -Name AzureAD.Standard.Preview

ModuleType Version    PreRelease Name
---------- -------    ---------- ----
Script     0.1.599.7             AzureAD.Standard.Preview

图形用户界面中的差异

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2020-07-02 10:42:18

我已经设法解决了这个问题,所以我想为其他可能试图从他们的应用程序注册中删除这个许可的人留下一个适当的答案。

正如我前面所讨论的,我使用了一个空的[Microsoft.Open.AzureAD.Model.OAuth2Permission]列表,这是正确的路径。

如果您在创建应用程序时通过New-AzureADApplication应用这一点,它将完全没有效果。

如果在创建新的应用程序注册后直接通过Set-AzureADApplication应用程序注册,您将得到如下错误:

代码语言:javascript
复制
Set-AzureADApplication: Error occurred while executing SetApplication 
Code: Request_BadRequest
Message: Property  value cannot be deleted or updated unless it is disabled first.
RequestId: ********-****-****-*****************
DateTimeStamp: Thu, 02 Jul 2020 10:11:54 GMT
Details: PropertyName  - None, PropertyErrorCode  - CannotDeleteEnabledEntitlement
HttpStatusCode: BadRequest
HttpStatusDescription: Bad Request
HttpResponseStatus: Completed

因此,解决方案是首先创建一个新列表,向其添加旧的作用域,同时将值IsEnabled设置为$false

代码语言:javascript
复制
# New Azure AD Application
Connect-AzureAD
$GraphRead = Get-AzureADServicePrincipal -All $true | Where-Object {$_.AppId -eq '00000003-0000-0000-c000-000000000000'}
$RRA = New-Object -TypeName "Microsoft.Open.AzureAD.Model.RequiredResourceAccess"
$RRA.ResourceAppId = $GraphRead.AppId
$ResAcc = New-Object -TypeName "microsoft.open.azuread.model.resourceAccess" -ArgumentList "e1fe6dd8-ba31-4d61-89e7-88639da4683d", "Scope"
$RRA.ResourceAccess = $ResAcc
$Test = New-AzureADApplication -DisplayName "PoshTest" -ReplyUrls "https://visualstudio/spn" -RequiredResourceAccess @($RRA)

# Disable the App Registration scope.
$Scopes = New-Object System.Collections.Generic.List[Microsoft.Open.AzureAD.Model.OAuth2Permission]
$Scope = $Test.Oauth2Permissions | Where-Object { $_.Value -eq "user_impersonation" }
$Scope.IsEnabled = $false
$Scopes.Add($Scope)
Set-AzureADApplication -ObjectId $Test.ObjectID -Oauth2Permissions $Scopes

最后,您可以完全删除OAuth2Permssion,然后将空列表应用到它。

代码语言:javascript
复制
$EmptyScopes = New-Object System.Collections.Generic.List[Microsoft.Open.AzureAD.Model.OAuth2Permission]
Set-AzureADApplication -ObjectId $Test.ObjectID -Oauth2Permissions $EmptyScopes

使用Get-AzureADApplication获取对象的最新信息,您应该看到OAuth2Permissions列表现在是空的。

代码语言:javascript
复制
$Test = Get-AzureADApplication -ObjectId $Test.ObjectID
$Test | FL *

DeletionTimestamp          : 
ObjectId                   : ********-****-****-*****************
ObjectType                 : Application
AddIns                     : {}
AppId                      : ********-****-****-*****************
AppRoles                   : {}
AvailableToOtherTenants    : False
DisplayName                : PoshTest
ErrorUrl                   : 
GroupMembershipClaims      : 
Homepage                   : 
IdentifierUris             : {}
KeyCredentials             : {}
KnownClientApplications    : {}
LogoutUrl                  : 
Oauth2AllowImplicitFlow    : False
Oauth2AllowUrlPathMatching : False
Oauth2Permissions          : {}
Oauth2RequirePostResponse  : False
PasswordCredentials        : {}
PublicClient               : 
RecordConsentConditions    : 
ReplyUrls                  : {https://visualstudio/spn}
RequiredResourceAccess     : {class RequiredResourceAccess {
                               ResourceAppId: 00000003-0000-0000-c000-000000000000
                               ResourceAccess: 
                             System.Collections.Generic.List`1[Microsoft.Open.AzureAD.Model.ResourceAccess]
                             }
                             }
SamlMetadataUrl            :
票数 5
EN

Stack Overflow用户

发布于 2021-08-27 06:25:35

我知道这个问题已经存在了一年多了,但我遇到了同样的问题,并找到了一个解决方案,在创建应用程序注册后不需要删除user_impersonation

我使用了PowerShell AzureAD API的ADMS版本,发现我可以获得我想要的结果,而不需要意外的额外结果:

使用以下方法指定API权限:

代码语言:javascript
复制
$Resources = New-Object -TypeName "Microsoft.Open.MSGraph.Model.RequiredResourceAccess"
$Resources.ResourceAppId = "00000003-0000-0000-c000-000000000000" # Microsoft Graph
$Resource1 = New-Object -TypeName "Microsoft.Open.MSGraph.Model.ResourceAccess" -ArgumentList "7427e0e9-2fba-42fe-b0c0-848c9e6a8182","Scope"
$Resource2 = New-Object -TypeName "Microsoft.Open.MSGraph.Model.ResourceAccess" -ArgumentList "e1fe6dd8-ba31-4d61-89e7-88639da4683d","Scope"
$Resources.ResourceAccess = $Resource1, $Resource2

创建应用程序注册的步骤如下:

代码语言:javascript
复制
$NewApp = New-AzureADMSApplication `
            -DisplayName $Name `
            -SignInAudience AzureADMultipleOrgs `
            -RequiredResourceAccess $Resources
票数 2
EN

Stack Overflow用户

发布于 2020-07-02 08:57:10

您是对的,默认情况下不再需要权限,但是由于遗留原因,PowerShell命令中仍然存在权限。

请查看Configure.ps1中的代码,它定位这个额外的作用域并重命名它。您可以将其更改为完全删除范围。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/62691947

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档