我正在努力将Azure AD登录身份验证集成到我的Web应用程序中。我已经在azure开发门户中创建了一个帐户,并注册了我的应用程序详细信息。
我的应用网址-> https://my-sample-app/my.dashboard/
我的重定向网址是-> https://my-sample-app/my.dashboard/ws/aad/callback/
注意:我的应用程序网址后面的ws是配置的servlet适配器
我的网络应用程序是一个Java应用程序,我正在使用ADAL Java SDK
我已经参考了这篇文章Authenticate to an Azure API App from Java,并以类似的方式
这是在网络路径“ aad / callback”下编写的代码逻辑
String appIdUri = System.getProperty("azure.app.id.uri", "https://login.microsoftonline.com/");
String authority = System.getProperty("azure.authority.url", "https://login.microsoftonline.com/my-sample-app.onmicrosoft.com");
String clientId = System.getProperty("azure.client.id", "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx");
String clientSecret = System.getProperty("azure.client.secret", "xxxxxxxxxxxxxxxxxxxxxxxx");
AuthenticationContext context = null;
AuthenticationResult result = null;
ExecutorService service = null;
UserVO userVO = null;
try {
HttpsURLConnection conn = (HttpsURLConnection) new URL(appIdUri).openConnection();
service = Executors.newFixedThreadPool(1);
context = new AuthenticationContext(authority, false, service);
ClientCredential credential = new ClientCredential(clientId, clientSecret);
Future<AuthenticationResult> future = context.acquireToken(appIdUri, credential, null);
result = future.get();
HttpSession session = request.getSession();
LOGGER.info("session :{}",session);
String accessToken = null;
if (result == null) {
throw new ServiceUnavailableException("authentication result was null");
} else {
accessToken = result.getAccessToken();
}
String data = "{\"access_token\": \"" + accessToken + "\"}";
LOGGER.info("access_token :{}", data);
conn.setRequestMethod("POST");
conn.setDoOutput(true);
conn.addRequestProperty("Content-Length", data.length() + "");
new DataOutputStream(conn.getOutputStream()).writeBytes(data);
String authTokenResp = IOUtils.toString(conn.getInputStream());
Gson gson = new Gson();
Map<String, Object> map = gson.fromJson(authTokenResp, Map.class);
String authenticationToken = (String) map.get("authenticationToken");
System.out.println("Authentication Token: "+authenticationToken);
我能够在日志语句中看到访问令牌的值,但是我从authTokenResp收到的authTokenResp输出值= IOUtils.toString(conn.getInputStream());看起来有些html页面(可能是portal.office.com的登录页面响应)中没有密钥authenticationToken。
我认为我为appIdUri提到了错误的URL,从而犯了错误。
请问有人可以告诉我appIdUri的URL是什么?在Azure门户中哪里可以找到该URL值?
答案 0 :(得分:0)
此示例只是获取访问令牌的client credential flow。
请问有人可以告诉我appIdUri的URL是什么? 在Azure门户中哪里可以找到该URL值?
acquireToken
方法的第一个参数是您要访问的资源的值。它是目标Web API(安全资源)的App ID URI。若要查找应用程序ID URI,请在Azure门户中,依次单击“ Azure Active Directory”,“应用程序注册”,打开应用程序的“设置”页面,然后单击“属性”。它也可能是外部资源,例如https://graph.microsoft.com。授权请求或令牌请求之一都需要这样做。
my-sample-app.onmicrosoft.com
是您的租户名称吗?
String authority = System.getProperty("azure.authority.url", "https://login.microsoftonline.com/{your_tenant_name}");
如果要将Azure AD登录身份验证集成到Web应用程序,则应参考this sample。