具有 ADFS SAML 身份验证的 Java Web 服务客户端



我们正在尝试连接到具有ADFS SAML身份验证的Web服务(从Java(。

我看到的所有示例都使用基于 HTTPS 的基本身份验证。(我现在只是使用 HttpsURLConnection 来发出请求,而不是使用 Axis 或 JAX-WS 之类的东西(

我不确定如何处理ADFS SAML身份验证。以下是我目前所了解的(对SAML了解不多(:

  1. 我提出一个请求,传递用户名/密码并获得身份验证令牌返回
  2. 保存身份验证令牌
  3. 在我的调用中将令牌作为某个SOAP属性传递,我在其中调用在网络服务上的实际操作
  4. 不知道我会把这个身份验证令牌放在哪个属性下

我的上述方法是否正确?如果是这样,是否有一些库可供我使用来完成所有这些工作?

如果没有,我该如何手动执行此操作?

请让我知道是否有其他或更好的方法可以解决这个问题。

如果您正在尝试构建本机应用程序,则可以使用以下代码。 我尝试使用Power BI REST API。 获得令牌后,您可以在 API 调用中使用它。

public class PublicClient {
private final static String AUTHORITY = "https://login.microsoftonline.com/common";
private final static String CLIENT_ID = "XXXX-xxxx-xxx-xxx-xxxX";
private final static String RESOURCE = "https://analysis.windows.net/powerbi/api";
public static void main(String args[]) throws Exception {
try (BufferedReader br = new BufferedReader(new InputStreamReader(System.in))) {
System.out.print("Enter username: ");
String username = br.readLine();
System.out.print("Enter password: ");
String password = br.readLine();
AuthenticationResult result = getAccessTokenFromUserCredentials(
username, password);
System.out.println("Access Token - " + result.getAccessToken());
System.out.println("Refresh Token - " + result.getRefreshToken());
System.out.println("ID Token Expires on - " + result.getExpiresOn());
}
}
private static AuthenticationResult getAccessTokenFromUserCredentials(
String username, String password) throws Exception {
AuthenticationContext context = null;
AuthenticationResult result = null;
ExecutorService service = null;
try {
service = Executors.newFixedThreadPool(1);
context = new AuthenticationContext(AUTHORITY, false, service);
Future<AuthenticationResult> future = context.acquireToken(
RESOURCE, CLIENT_ID, username, password, null);
result = future.get();
} finally {
service.shutdown();
}
if (result == null) {
throw new ServiceUnavailableException(
"authentication result was null");
}
return result;
}
}

最新更新