我正在尝试进行身份验证和应用程序,并获取承载令牌以备将来使用。我得到的错误是该线程的标题。
另一个线程描述了同样的事情,除了我的代码使用Java。解决方法是使用证书方法。 "To sign into this application the account must be added to the domain.com directory"
有人可以介绍此解决方法的详细步骤:-证书方法 或者如何用其他方法修复以下代码 还是有其他方法可以完成整个任务
这是我的代码
private final static String AUTHORITY = "https://login.microsoftonline.com/<tenantId>/OAuth2/Authorize";
private final static String CLIENT_ID = "<Client_Id>";
private final static String CLIENT_SECRET = "<Secret>";
public static void main(String args[]) throws Exception {
try (BufferedReader br = new BufferedReader(new InputStreamReader(
System.in))) {
String username = CLIENT_ID;
String password = CLIENT_SECRET;
service = Executors.newFixedThreadPool(1);
context = new AuthenticationContext(AUTHORITY, false, service);
Future<AuthenticationResult> future = context.acquireToken(
"https://graph.microsoft.com", CLIENT_ID, username, password,
null);
result = future.get();
}
finally {
service.shutdown();
}
}
我已经在AAD应用注册中注册了我的应用。 Client_Id是应用ID,而Secret是上述代码中的密钥
答案 0 :(得分:1)
如果您想使代码以当前形式运行而不需要任何解决方法,请检查以下内容-
确保在代码的第一行中指定了正确的tenantId GUID 。
获取tenantid的步骤-
登录到Azure门户,导航到您的Azure AD,转到下面的屏幕快照中的属性,目录ID应该为您提供GUID。
private final static String AUTHORITY = "https://login.microsoftonline.com/<tenantId>/OAuth2/Authorize";
请确保您使用的用户名是属于AzureAD租户的用户。
一个可能的原因可能是您使用的是Microsoft帐户,例如xyz@outlook.com或hotmail.com等。请尝试使用在此Azure AD中创建的帐户,例如xyz@yourtenantdomain.onmicrosoft.com或任何其他帐户租户使用的经过验证的域。
Future<AuthenticationResult> future = context.acquireToken("https://graph.microsoft.com", CLIENT_ID, username, password, null);
答案 1 :(得分:0)
如果您要使用证书凭据对应用进行身份验证,则可以参考此article。
步骤:
1。Uploading the certificate file
2。Updating the application manifest
代码示例(使用C#,您可以参考): Authenticating to Azure AD in daemon apps with certificates
它还显示了如何使用New-SelfSignedCertificate
Powershell命令create a self-signed certificate。您还可以利用app creation scripts来创建证书,计算指纹等等。