如何序列化和反序列化 IGraphServiceClient 客户端对象?
How to serialize and Deserialize IGraphServiceClient client object?
我们正在开发一个使用 Microsoft Graph SDK 来实现 Excel/OneDrive 相关功能的项目。我们有一个用例,我们需要序列化和反序列化 IGraphServiceClient
客户端 reference/object。
我们试图反序列化该对象,但出现了 NotSerializableException
异常。我们正在探索 SDK 并找到 ISerializer.java
class 但无法在 serialization/Deserialization 中使用它。
能否请您帮助我们解决这个问题?
UsernamePasswordProvider authProvider =
new UsernamePasswordProvider(clientId, scopes, userName, password, null, tenantid, clientSecret);
IGraphServiceClient client= GraphServiceClient
.builder()
.authenticationProvider((IAuthenticationProvider) authProvider).buildClient());
这是不可能的,坦率地说,serializing/deserializing 客户端本身没有任何价值。
您真正想要的是请求offline_access
范围,这样您将在[=12]的同时收到refresh_token
=] 您用来调用 Microsoft Graph 的方法。然后您可以存储 refresh_token
字符串并使用它来接收 updated/fresh access_token
。然后,您可以在需要调用 Microsoft Graph 时使用该令牌创建一个新的 IGraphServiceClient
实例。
您可以获取如下IAuthenticationProvider。
public static void main(String[] args) {
IAuthenticationProvider authProvider = new UsernamePasswordProvider(
"{clientId}",
Arrays.asList("https://graph.microsoft.com/User.Read"),
"{userName}",
"{password}",
NationalCloud.Global,
"{tenantId}",
"{clientSecret}");
GraphServiceClient graphClient = (GraphServiceClient) GraphServiceClient.builder()
.authenticationProvider(authProvider)
.buildClient();
User user = graphClient.me().buildRequest().get();
}
顺便说一句,如果你使用Maven安装microsoft-graph-auth
,会有一些问题。目前源代码和 Maven 存储库不匹配。 microsoft-graph-auth
的源码没问题。因此,您可以下载 msgraph-sdk-java-auth 的 source code 并将其导出为 jar 文件。使用此 jar 文件而不是使用 com.microsoft.graph.0.1.0-SNAPSHOT。这会起作用。
另一种方法是使用Gradle安装microsoft-graph-auth
。这很好用。
repository {
jcenter()
jcenter{
url 'http://oss.jfrog.org/artifactory/oss-snapshot-local'
}
}
dependency {
// Include the sdk as a dependency
compile('com.microsoft.graph:microsoft-graph-auth:0.1.0-SNAPSHOT')
}
我们正在开发一个使用 Microsoft Graph SDK 来实现 Excel/OneDrive 相关功能的项目。我们有一个用例,我们需要序列化和反序列化 IGraphServiceClient
客户端 reference/object。
我们试图反序列化该对象,但出现了 NotSerializableException
异常。我们正在探索 SDK 并找到 ISerializer.java
class 但无法在 serialization/Deserialization 中使用它。
能否请您帮助我们解决这个问题?
UsernamePasswordProvider authProvider =
new UsernamePasswordProvider(clientId, scopes, userName, password, null, tenantid, clientSecret);
IGraphServiceClient client= GraphServiceClient
.builder()
.authenticationProvider((IAuthenticationProvider) authProvider).buildClient());
这是不可能的,坦率地说,serializing/deserializing 客户端本身没有任何价值。
您真正想要的是请求offline_access
范围,这样您将在[=12]的同时收到refresh_token
=] 您用来调用 Microsoft Graph 的方法。然后您可以存储 refresh_token
字符串并使用它来接收 updated/fresh access_token
。然后,您可以在需要调用 Microsoft Graph 时使用该令牌创建一个新的 IGraphServiceClient
实例。
您可以获取如下IAuthenticationProvider。
public static void main(String[] args) {
IAuthenticationProvider authProvider = new UsernamePasswordProvider(
"{clientId}",
Arrays.asList("https://graph.microsoft.com/User.Read"),
"{userName}",
"{password}",
NationalCloud.Global,
"{tenantId}",
"{clientSecret}");
GraphServiceClient graphClient = (GraphServiceClient) GraphServiceClient.builder()
.authenticationProvider(authProvider)
.buildClient();
User user = graphClient.me().buildRequest().get();
}
顺便说一句,如果你使用Maven安装microsoft-graph-auth
,会有一些问题。目前源代码和 Maven 存储库不匹配。 microsoft-graph-auth
的源码没问题。因此,您可以下载 msgraph-sdk-java-auth 的 source code 并将其导出为 jar 文件。使用此 jar 文件而不是使用 com.microsoft.graph.0.1.0-SNAPSHOT。这会起作用。
另一种方法是使用Gradle安装microsoft-graph-auth
。这很好用。
repository {
jcenter()
jcenter{
url 'http://oss.jfrog.org/artifactory/oss-snapshot-local'
}
}
dependency {
// Include the sdk as a dependency
compile('com.microsoft.graph:microsoft-graph-auth:0.1.0-SNAPSHOT')
}