我在https://azure.microsoft.com/en-us/documentation/samples/active-directory-dotnet-daemon-certificate-credential/使用Azure AD向服务应用程序验证具有证书的守护程序应用程序。我已经完成了以下操作:
- 创建我自己的Active Directory
- 在AD中创建守护程序应用程序名称:TodoListDaemonWithCertYanlin登录URL:http://TodoListDaemonWithCertYanlin应用程序Id Url:http://TodoListDaemonWithCertYanlin
- 创建自签名证书makecert-r-pe-n"CN=TodoListDaemonWithCertYanlin"-ss My-len 2048 TodoListDaemonWithCert.cer
当我尝试将证书添加到PowerShell中的守护程序应用程序时,我遇到了一个错误。
我使用的PowerShell命令:New MsolServicePrincipalCredential-AppPrincipalId"e5dedde0-2221-4ce4-a74d-af4e96705c01"-Type asyymmetric-值$credValue-起始日期$cer.GetEffectiveDateString()-结束日期$cer.GetExpirationDateString(()-用法验证
错误为:新建MsolServicePrincipalCredential:未找到服务主体
"Get-MsolServicePrincipal-SearchString TodoListDaemonWithCert"返回了一堆应用程序,但我的不包括在内。
我怀疑Azure可能会搜索我组织的广告,而不是我创建的广告。但我不知道如何调试这个问题。
问题已解决。
原因如下:我使用组织的凭据登录Azure,然后创建了一个测试Active Directory,并在测试Active Directory中创建了Todo List Daemon应用程序。当我在PowerShell中登录Azure时,我使用了组织的凭据。Azure PowerShell似乎只会在我的组织的AD中寻找应用程序原理,而不是在我的测试AD中——可能有一种切换AD的方法,但我还不知道。
以下是我解决问题的方法:
- 前往https://manage.windowsazure.com并尝试在我的测试AD中使用用户登录
- Azure提示用户未与任何订阅关联。按照"注册"链接注册免费试用订阅
- 等待几分钟,以便为租户进行配置
- 在PowerShell中,使用我测试azure AD中的用户登录到azure,然后再次运行PowerShell。现在它成功了
以下是我运行的PowerShell cmdlet:
connect-msolservice
$cer = New-Object System.Security.Cryptography.X509Certificates.X509Certificate
$cer.Import("D:Fast1devTodoListDaemonWithCert.cer")
$binCert = $cer.GetRawCertData()
$credValue = [System.Convert]::ToBase64String($binCert)
New-MsolServicePrincipalCredential -AppPrincipalId "e5dedde0-2221-4ce4-a74d-af4e96705c01" -Type asymmetric -Value $credValue -StartDate $cer.GetEffectiveDateString() -EndDate $cer.GetExpirationDateString() -Usage verify