Java 如何序列化和反序列化IGraphServiceClient对象?
我们正在进行一个使用Microsoft Graph SDK实现Excel/OneDrive相关功能的项目。我们有一个用例,需要序列化和反序列化客户机引用/对象 我们试图反序列化对象,但得到了一个Java 如何序列化和反序列化IGraphServiceClient对象?,java,microsoft-graph-api,microsoft-graph-sdks,Java,Microsoft Graph Api,Microsoft Graph Sdks,我们正在进行一个使用Microsoft Graph SDK实现Excel/OneDrive相关功能的项目。我们有一个用例,需要序列化和反序列化客户机引用/对象 我们试图反序列化对象,但得到了一个notserializableeexception异常。我们正在探索SDK并查找类,但无法在序列化/反序列化中使用它 你能帮我们解决这个问题吗 UsernamePasswordProvider authProvider= 新的UsernamePasswordProvider(clientId、作用域、用户
notserializableeexception
异常。我们正在探索SDK并查找类,但无法在序列化/反序列化中使用它
你能帮我们解决这个问题吗
UsernamePasswordProvider authProvider=
新的UsernamePasswordProvider(clientId、作用域、用户名、密码、null、tenantid、clientSecret);
IGraphServiceClient=GraphServiceClient
.builder()
.authenticationProvider((IAAuthenticationProvider)authProvider.buildClient());
这是不可能的,坦率地说,序列化/反序列化客户端本身没有任何价值
您真正想要的是请求
offline\u访问
范围,以便在access\u令牌
用于调用Microsoft Graph的同时收到refresh\u令牌
。然后,您可以存储刷新\u令牌
字符串,并使用它接收更新的/fresh访问\u令牌
。然后,无论何时需要调用Microsoft Graph,都可以使用该令牌创建一个新的IGraphServiceClient
实例 您可以获得IAAuthenticationProvider,如下所示
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的,并将其导出为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')
}
这是一个类似的问题,我突然想到。希望有一个才华横溢的人,来帮助我们。谢谢你发布这个问题!我也试图克服这种情况,但在这里被绊住了。我不知道你为什么要序列化客户端本身。为了什么?客户端是无状态的,且令牌不可移植,因此您需要反序列化并请求令牌,这将大大增加开销,以完成与创建新实例相同的任务。Hi@Marclafler,是否可以存储身份验证和刷新令牌,然后使用它们创建新的IGraphServiceClient实例?Hi Marc,谢谢你帮我。我明白你关于“序列化/反序列化客户端”的观点。正如您建议使用access_令牌创建新的IGraphServiceClient实例一样,我研究了“msgraph sdk java auth”,但找不到任何AuthenticationProvider类,其构造函数接受令牌作为参数。IGraphServiceClient=GraphServiceClient.builder().authenticationProvider((IAAuthenticationProvider)authProvider.buildClient());在上面的LOC中,我需要传递一个IAAuthenticationProvider对象来构建客户机对象。是否有任何实现可用于通过令牌获取IAAuthenticationProvider实例。