繁体   English   中英

Azure AD应用程序-如何从C#或Powershell设置一些参数?

[英]Azure AD Application - how to set some parameters from C# or Powershell?

我试图以此方式在Azure中注册应用程序(我从C#应用程序运行此脚本,使用运行时文本模板生成了一些变量,然后<#=#>是常量):

Import-Module AzureRM.Resources
Login-AzureRmAccount 
$cert = New-SelfSignedCertificate -CertStoreLocation "cert:\CurrentUser\My" -Subject "CN=Test" -KeySpec KeyExchange
$keyValue = [System.Convert]::ToBase64String($cert.GetRawCertData())
$app = New-AzureRmADApplication -DisplayName "<#= Model.ManageApplicationName #>" -HomePage "https://<#= Model.Domain #>/<#= Model.ManageApplicationName #>" -IdentifierUris "https://<#= Model.Domain #>/<#= Model.ManageApplicationName #>"  -AvailableToOtherTenants $true -CertValue $keyValue -EndDate $cert.NotAfter -StartDate $cert.NotBefore
$app.ApplicationId
New-AzureRmADServicePrincipal -ApplicationId $app.ApplicationId
Start-Sleep -s 30
New-AzureRmRoleAssignment -RoleDefinitionName Contributor -ServicePrincipalName $app.ApplicationId.Guid

效果很好,我可以在门户中看到应用程序...

然后,我需要获取访问令牌以在Microsoft.Azure.Management.Resources库中使用它来管理一些资源。

因此,我需要获取应用程序密钥/客户端密钥,才能通过ClientCredentials获得令牌,是否有可能在Powershell或API中进行呢?

然后我试图用另一种方式做。 我从文档中遵循了本教程: https : //azure.microsoft.com/en-us/documentation/articles/resource-manager-api-authentication/

我发现此问题从教程中调用https://login.microsoftonline.com/ {tenant-id} / OAuth2 / Authorize,当然有我自己的值:

AADSTS65005:客户端应用程序已请求对资源的访问。此请求失败,因为客户端未在其requiredResourceAccess列表中指定此资源。

  • 当我在门户中设置Windows Azure服务管理API权限时,此问题已修复-可以通过C#或Powershell完成吗?

AADSTS50011:没有为该应用程序注册答复地址。

  • 当我设置“回复URL”时,此问题已得到解决-可以通过C#或Powershell完成吗?

我很困惑,因为在文档中没有关于此附加手动设置的任何内容。 问题是需要使整个过程自动化。 因此,我需要在AD中创建应用并获取访问令牌,而无需在Portal中进行任何点击。 希望有可能。

谢谢你的帮助。

当我在门户中设置Windows Azure服务管理API权限时,此问题已修复-可以通过C#或Powershell完成吗?

是的,我们可以使用Azure AD Graph REST向应用授予OAuth 2.0权限。 为了减轻这种情况,我们需要租户的管理员。 而且我们仍然需要一个应用程序,该应用程序已经以登录用户的身份授予访问目录的权限。 然后,我们可以根据OAuth2.0代码授予流程与管理员一起获取令牌。 最后,我们可以使用下面的REST请求更新应用程序,以将Windows Azure Service Management API分配给应用程序:

Patch: graph.windows.net/adfei.onmicrosoft.com/applications/{objectIdOfApplication}?api-version=1.6
authorization: bearer {token}
{
            "requiredResourceAccess": [
            {
                "resourceAppId": "797f4846-ba00-4fd7-ba43-dac1f8f63013",
                "resourceAccess": [
                    {
                        "id": "41094075-9dad-400e-a0bd-54e686782033",
                        "type": "Scope"
                    }
                ]
            },
            {
                "resourceAppId": "00000002-0000-0000-c000-000000000000",
                "resourceAccess": [
                    {
                        "id": "311a71cc-e848-46a1-bdf8-97ff7156d8e6",
                        "type": "Scope"
                    },
                    {
                        "id": "cba73afc-7f69-4d86-8450-4978e04ecd1a",
                        "type": "Scope"
                    },
                    {
                        "id": "a42657d6-7f20-40e3-b6f0-cee03008a62a",
                        "type": "Scope"
                    }
                ]
            }
        ]
 }

resourceAppId 797f4846-ba00-4fd7-ba43-dac1f8f63013用于Windows Azure服务管理API ,而00000002-0000-0000-c000-000000000000用于Windows Azure Active Directory(我之前配置的应用程序)。 您可以获取出口requiredResourceAccess的应用程序,并追加resourceAppId 797f4846-ba00-4fd7-ba43-dac1f8f63013

当我设置“回复URL”时,此问题已得到解决-可以通过C#或Powershell完成吗?

是。 我们可以使用Set-AzureRmADApplication在Azure Power Shell 3.0中设置ReplyUrls 并且您还可以在创建应用程序时指定它(请参阅New-AzureRmADApplication )。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM