gpt4 book ai didi

ios - Evernote iOS SDK - 如何使用 token 进行身份验证?

转载 作者:塔克拉玛干 更新时间:2023-11-02 09:01:12 24 4
gpt4 key购买 nike

我正在使用适用于 iOS 的 Evernote SDK,并且在用户获得授权访问时保存身份验证 token 。

一旦用户在不同的设备上安装了我的应用程序,我想使用该 token 自动重新进行身份验证,但看起来 SDK 不支持。有办法吗?

最佳答案

上周我遇到了同样的问题,他们的 SDK 确实不支持开箱即用,但经过一番研究,我找到了一个完美的解决方案。此解决方案模仿有效的身份验证流程。

一些背景知识:

ENSession 类初始化时,它会检索保存在钥匙串(keychain)上的凭据(除非之前调用了 [[ENSession sharedSession] unauthenticate])。问题是当使用不同的设备时钥匙串(keychain)是空的,所以我们的目标是添加一个有效的 ENCredentials 实例到 ENCredentialStore

解决方案:

  1. 将以下导入添加到您的代码中:ENCredentials.hENCredentialStore.h。我们稍后会需要它们。

  2. 像您已经做的那样初始化 ENSession,使用 setSharedSessionConsumerKey:(NSString *)key consumerSecret:(NSString *)secret optionalHost:(NSString *)host .

  3. 为了创建一个有效的ENCredentials对象,我们需要提供以下对象:

    • NSString * 主机
    • NSString * edamUserId
    • NSString * noteStoreUrl
    • NSString * webApiUrlPrefix
    • NSString * authenticationToken
    • NSDate * 过期日期

    host 始终是 www.evernote.com(在 ENSessionBootstrapServerBaseURLStringUS 下的 ENSession 中定义)。

    edamUserId 是您在获取原始 token 时收到的用户 ID。 expirationDate 也一样。如果您不确定如何获取它们,那么您应该使用 [[ENSession sharedSession].userStore getUserWithSuccess:^(EDAMUser *user) 一旦通过身份验证。

    所以实际上唯一缺少的对象是 noteStoreUrlwebApiUrlPrefix。它们的格式始终是:

    • noteStoreUrl:https://www.evernote.com/shard/edam_shard/notestore
    • webApiUrlPrefix: https://www.evernote.com/shard/edam_shard/

    幸运的是,您的 token 已包含 ​​edam_shared(S= 的值,请参阅 this):

    @"S=s161:U=5ce3f20:E=1561182201b:C=24eb9d000f8:P=285:A=app:V=2:H=e8ebf56eac26aaacdef2f3caed0bc309"

    如果您提取 s161 并将其放入上面的 URL 中,它将起作用(我相信您知道如何提取它,但如果您遇到问题请告诉我)。

现在我们已准备好使用 token 进行身份验证。首先,使用类别从 ENSession 公开必要的功能:

@interface ENSession(Authentication)

- (void)startup;

- (void)addCredentials:(ENCredentials *)credentials;

@end

并使用 token 进行身份验证:

ENCredentials *credentials = [[ENCredentials alloc] initWithHost:ENSessionBootstrapServerBaseURLStringUS edamUserId:userId noteStoreUrl:noteStoreUrl webApiUrlPrefix:webApiUrlPrefix authenticationToken:token expirationDate:expirationDate];
[[ENSession sharedSession] addCredentials:credentials];
[[ENSession sharedSession] startup];

为了刷新 ENSession 并检索新存储的凭据,最后一行很重要。

现在您已通过身份验证并可以查询 SDK。祝你好运。

关于ios - Evernote iOS SDK - 如何使用 token 进行身份验证?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31582099/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com