Heimdall.droid, 使用trivago轻松地为Android使用 OAuth 2库

分享于 

7分钟阅读

GitHub

  繁體 雙語
Easy to use OAuth 2 library for Android by Rheinfabrik.
  • 源代码名称:Heimdall.droid
  • 源代码网址:http://www.github.com/trivago/Heimdall.droid
  • Heimdall.droid源代码文档
  • Heimdall.droid源代码下载
  • Git URL:
    git://www.github.com/trivago/Heimdall.droid.git
    Git Clone代码到本地:
    git clone http://www.github.com/trivago/Heimdall.droid
    Subversion代码到本地:
    $ svn co --depth empty http://www.github.com/trivago/Heimdall.droid
    Checked out revision 1.
    $ cd repo
    $ svn up trunk
    
    Heimdall

    Heimdall是一个用于轻松使用和灵活性的OAuth 2.0 客户端。 就像 Authorization 4中描述的那样,它支持所有的授权,同时还可以刷新访问令牌,如的授权框架的。

    这个库使用 RxJava。 因此,你应该熟悉的可见性。

    如果你是一位iOS开发人员,那么请看一下 Swift 版本的Heimdall。

    JitPack.ioTravis CiAndroid ArsenalApi

    安装

    Heimdall已经准备好通过 jitpack.io 插件使用。 只需将下面的代码添加到 root build.gradle:

    allprojects {
     repositories {
     jcenter()
     maven { url "https://jitpack.io" }
     }
    }

    现在在你的应用程序的build.gradle 中添加gradle依赖项:

    dependencies {
     compile 'com.github.rheinfabrik:Heimdall.droid:{latest_version}'}

    示例

    heimdall类的主要内容是 OAuth2AccessTokenManager。 它负责检索一个新的访问令牌,并通过刷新它保持它有效。

    为了初始化 OAuth2AccessTokenManager 实例,需要传递一个实现 OAuth2AccessTokenStorage 接口的对象。 你可以使用预定义 SharedPreferencesOAuth2AccessTokenStorage 如果符合你的需要。 确保你的OAuth2AccessTokenStorage 尽可能安全 !

    SharedPreferencesOAuth2AccessTokenStorage<OAuth2AccessToken> storage =newSharedPreferencesOAuth2AccessTokenStorage<>(mySharedPreferences, OAuth2AccessToken.class);OAuth2AccessTokenManager<> manager =newOAuth2AccessTokenManager<OAuth2AccessToken>(storage);

    在你的管理器实例上,现在可以调用 grantNewAccessToken(grant) 来接收新的访问令牌。 你所传递的授权实例必须实现 OAuth2Grant 接口和你的实际服务器调用。

    这里有一个例子 OAuth2ResourceOwnerPasswordCredentialsGrant

    publicclassMyOAuth2GrantextendsOAuth2ResourceOwnerPasswordCredentialsGrant<OAuth2AccessToken> {
     // Constructor@OverridepublicObservable<OAuth2AccessToken>grantNewAccessToken() {
     // Create the network request based on the username, the password and the grant type.// You can use Retrofit to make things easier. }
    }

    你的管理器实例还有一个名为 getValidAccessToken(refreshGrant)的方法。 这可能是我们构建这个库的主要原因。 它首先检查存储的访问令牌是否过期,然后在使用传递的刷新授权时发出未过期的或者 refreshs。

    这里有一个 OAuth2RefreshAccessTokenGrant的例子。

    publicclassMyOAuth2GrantextendsOAuth2RefreshAccessTokenGrant<OAuth2AccessToken> {
     // Constructor@OverridepublicObservable<OAuth2AccessToken>grantNewAccessToken() {
     // Create the network request based on the grant type and the refresh token.// You can use Retrofit to make things easier. }
    }

    大多数情况下,你将使用 OAuth2AuthorizationCodeGrant 通过第三方服务( 如 Trakt.tv. ) 授权用户

    使用 Trakt.tv 授权授权的实现可能如下所示:

    publicfinalclassTraktTVAuthorizationCodeGrantextendsOAuth2AuthorizationCodeGrant<OAuth2AccessToken> {
     publicString clientSecret;
     @OverridepublicUribuildAuthorizationUri() {
     returnUri.parse("https://trakt.tv/oauth/authorize")
    . buildUpon()
    . appendQueryParameter("client_id", clientId)
    . appendQueryParameter("redirect_uri", redirectUri)
    . appendQueryParameter("response_type", RESPONSE_TYPE).build();
     }
     @OverridepublicObservable<OAuth2AccessToken>exchangeTokenForCode(Stringcode) {
     // Create the network request based on the grant type, clientSecret and the retrieved code.// You can use Retrofit to make things easier. }
    }

    使用 Android web view的授权可能类似于以下( 请注意,我们在这里使用 Retrolambda ):

    // Create the grantTraktTVAuthorizationCodeGrant grant =newTraktTVAuthorizationCodeGrant();
    grant.clientSecret ="secret"grant.clientId ="id"grant.redirectUri ="uri"// Set up web view loadingwebView.setWebViewClient(newWebViewClient() {
     @OverridepublicvoidonPageFinished(WebViewview, Stringurl) {
     super.onPageFinished(view, url);
     // Tell the grant we loaded an url grant.onUrlLoadedCommand.onNext(Uri.parse(url));
     }
    });// Load the authorization url once buildgrant.authorizationUri()
    . map(Uri::parse)
    . observeOn(AndroidSchedulers.mainThread())
    . subscribe(myWebView::load)// Start the authorization processgrant.grantNewAccessToken()
    . subscribe(token ->Log.d("Heimdall", "New token: "+ token))

    示例应用程序

    此外,请查看我们的示例应用程序,该应用程序执行针对 Trakt.tv的授权,并显示用户的简单列表。

    注意:为了构建示例,你必须在 Trakt.tv 创建新的应用程序,并在使用 TraktTvAPIConfiguration.java的地方添加凭据。

    Heimdall是由 trivago 构建的。


    Oauth  
    相关文章