首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何在Azure AD中以编程方式创建应用程序

如何在Azure AD中以编程方式创建应用程序
EN

Stack Overflow用户
提问于 2016-02-22 08:32:29
回答 2查看 2.6K关注 0票数 2

每当有新环境的请求时,我目前正在Azure Active directory上手动创建我的应用程序。我正在探索通过REST API从代码创建这些应用程序的方法。我成功地使用'client_credentials‘在现有的应用程序上创建了用户和组,如下所示。

代码语言:javascript
复制
ClientCredential clientCred = new ClientCredential(clientID, clientSecret);
AuthenticationResult authenticationResult = await authenticationContext.AcquireTokenAsync(resAzureGraphAPI, clientCred);

以类似的方式,我尝试使用从上面生成的'access_token‘来创建一个新的应用程序adClient.Applications.AddApplicationAsync(newApplication).Wait()

但是这会抛出一个错误--“权限不足,无法完成操作”。

我查看了其他线程和Azure AD msdn页面,发现client_credentials流不支持创建/更新应用程序。

Adding Applications programmatically in Azure AD using Client Credentials Flow

上面的线程还提到了解决这个问题的方法是使用'grant_type=password‘流。我按照建议进行了尝试,但我一直收到以下错误,这对我来说没有任何意义。

代码语言:javascript
复制
"error": "invalid_grant",
    "error_description": "AADSTS50034: To sign into this application the account must be added to the 1283y812-2u3u-u293u91-u293u1 directory.\r\nTrace ID: 66da9cf9-603f-4f4e-817a-cd4774619631\r\nCorrelation ID: 7990c26f-b8ef-4054-9c0b-a346aa7b5035\r\nTimestamp: 2016-02-21 23:36:52Z",
    "error_codes": [
        50034
    ],

下面是我要访问的有效负载和端点。传递的用户是我要在其中创建应用程序的AD的所有者

代码语言:javascript
复制
endpoint:https://login.windows.net/mytenantID/oauth2/token

post data
resource    00000002-0000-0000-c000-000000000000
client_id   id
client_secret   secret
grant_type  password
username    principal@mydomain.com
password    password
scope       openid

任何关于我可能会出错的想法或建议都将不胜感激。

EN

回答 2

Stack Overflow用户

发布于 2016-02-24 00:47:30

您可以使用PowerShell创建您的应用程序:

代码语言:javascript
复制
$servicePrincipalName =”Your Client App Name”
$sp = New-MsolServicePrincipal -ServicePrincipalNames $servicePrincipalName -DisplayName $servicePrincipalName -AppPrincipalId “Your Client ID"
New-MsolServicePrincipalCredential -ObjectId $sp.ObjectId -Type Password -Value “Your client secret”
Add-MsolRoleMember -RoleObjectId “62e90394-69f5-4237-9190-012177145e10" -RoleMemberType ServicePrincipal -RoleMemberObjectId $sp.ObjectId

62e90394-69f5-4237-9190-012177145e10表示的角色是管理员角色,可以根据需要调整为任何其他角色的ObjectId。运行Get-MsolRole以获取角色和ObjectIds的列表。

然后,您可以从您的应用程序运行此代码或手动运行它。您还需要在执行上述操作之前运行您的连接代码,如下所示:

代码语言:javascript
复制
$loginAsUserName = "Your Tenancy Admin Account"
$loginAsPassword = "Your Tenancy Admin Account Password"

$secpasswd = ConvertTo-SecureString $loginAsPassword -AsPlainText -Force
$creds = New-Object System.Management.Automation.PSCredential ($loginAsUserName, $secpasswd)

Connect-MsolService -Credential $creds
票数 0
EN

Stack Overflow用户

发布于 2016-03-03 21:34:04

我能够在我的租户中创建应用程序。我用来创建应用程序的AD租户已针对不同的域进行了验证。基本上,我最终插入了来自该域的用户,并使用resource_type=password流能够生成访问令牌。接下来,启动以下几行代码就行了

代码语言:javascript
复制
 ActiveDirectoryClient adClient = new ActiveDirectoryClient(
                serviceRoot,
                AccessToken);
adClient.Applications.AddApplicationAsync(newApplication).Wait();
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/35544000

复制
相关文章

相似问题

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