重定向到 Web 应用程序后无法获取身份验证令牌
Unable to get the authentication token after redirecting to web app
我正在努力将 Azure AD 登录身份验证集成到我的 Web 应用程序中。我已经在 Azure 开发门户中创建了一个帐户并注册了我的应用程序详细信息。
我的应用程序 URL -> https://my-sample-app/my.dashboard/
我的重定向 url 是 ->https://my-sample-app/my.dashboard/ws/aad/callback/
注意:在我的应用 url 之后出现的 ws 是配置的 servlet 适配器
我的网络应用程序是一个 java 应用程序,我正在使用 ADAL java SDK
我参考了这篇文章 并采用了类似的方式
这是web路径下写的代码逻辑"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 吗?我在哪里可以找到这个 URL Azure 门户中的值?
此示例只是client credential flow获取访问令牌。
please can i someone tell me what URL should be given for appIdUri ?
where can i find this URL value in azure portal ?
acquireToken
方法的第一个参数是您想要的资源的值 access.It 是目标网站的 App ID URI API(受保护的资源)。要查找 App 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。
我正在努力将 Azure AD 登录身份验证集成到我的 Web 应用程序中。我已经在 Azure 开发门户中创建了一个帐户并注册了我的应用程序详细信息。
我的应用程序 URL -> https://my-sample-app/my.dashboard/
我的重定向 url 是 ->https://my-sample-app/my.dashboard/ws/aad/callback/
注意:在我的应用 url 之后出现的 ws 是配置的 servlet 适配器
我的网络应用程序是一个 java 应用程序,我正在使用 ADAL java SDK
我参考了这篇文章
这是web路径下写的代码逻辑"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 吗?我在哪里可以找到这个 URL Azure 门户中的值?
此示例只是client credential flow获取访问令牌。
please can i someone tell me what URL should be given for appIdUri ? where can i find this URL value in azure portal ?
acquireToken
方法的第一个参数是您想要的资源的值 access.It 是目标网站的 App ID URI API(受保护的资源)。要查找 App 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。