学徒浅析Android——基于Microsoft的OAUTH2.0认证(三)

本文详细介绍了在Android应用中使用Microsoft Authentication Library (MSAL) 进行OAuth2.0认证,包括MSAL库常用API、scope配置、GRAPH库的使用以及如何手动请求Microsoft API。通过讲解如何配置AzureAD权限、创建scope数组,以及在不使用GRAPH库时手动发送POST请求调用Microsoft API,为开发者提供了完整的实践指导。
摘要由CSDN通过智能技术生成

第三章 MSAL API和Microsoft API的使用

本章围绕Microsoft Authentication Library的使用讲述如何调用Microsoft API。目录小节如下:

1.1 MSAL库常用API的介绍

1.2 scope的配置

1.3 GRAPH库的使用

1.4 手动请求Microsoft API

其他相关文章:

基于Microsoft的OAUTH2.0认证(一):基本概念梳理

基于Microsoft的OAUTH2.0认证(二):MSAL库的引用和定制

基于Microsoft的OAUTH2.0认证(四):常见错误汇总

1.1 MSAL库常用API的介绍

Oauth2.0的认证从创建账户管理对象开始,认证管理类PublicClientApplication提供了两个静态方法createSingleAccountPublicClientApplication和createMultipleAccountPublicClientApplication分别对应单账户管理类和多账户管理类的创建。两个方法都有三个入参:分别是:

@NonNull final Context context, 一个指定的Context对象,可以是某个actiivty,也可以是ApplicationContext。

final int configFileResourceId, 在AzureAD中注册的应用身份验证数据,就是文章(二)中提到的xml文件。

@NonNull final ISingleAccountApplicationCreatedListener/ IMultipleAccountApplicationCreatedListener listener

创建成功的回调监听器,回调监听器有两个方法onCreated和onError,其中onCreated提供实例化成功的接口对象。

这两个方法的是构建和Microsoft认证平台链接的关键,Microsoft认证平台会检测传入的验证数据是否存在与AzureAD中,检测是否已经注册了BrowserTabActivity,两者有一方不匹配就会触发onError。如果检测无误,你就可以在onCreated中拿到实例化成功的ISingleAccountPublicClientApplication/IMultipleAccountPublicClientApplication接口对象(真正实现了这两个接口的实体类在MSAL库中,对外提供的只有接口对象)。后续的获取token和刷新token都需要此处返回的实例化对象,如果你的认证操作不是一次性的,建议用全局变量将此处的对象予以保存。

单账户接口ISingleAccountPublicClientApplication顾名思义只能保持一个账户处于登录状态(signin),所以它提供了signIn()和signOut()方法,常用的API有如下几个:

signIn

入参:

@NonNull final Activity activity,
@Nullable final String loginHint,
@NonNull final String[] scopes,
@NonNull final AuthenticationCallback callback

 

异步登入账户,这个方法必须和signOut配合使用。如果重复调用会收到异常提示。从入参中看,我们不需要传入特定的账户。账户登录操作是在AuthorizationActivity中完成的,账户登录后将被记录到缓存中。每次调用signIn实际上都会先去检测缓存中是否存在登录的账号,只要有就会报错。所以成功调用signIn的前提是确保当前无登录中的账号。

signOut

入参:

@NonNull final SignOutCallback callback

异步登出账户,当然还有同步方法,是一个无入参且返回值为boolean类型的signOut()。这里的登出是真正的退出登录状态。

acquireTokenSilentAsync

入参:

@NonNull final String[] scopes,
@NonNull final String authority,
@NonNull final SilentAuthenticationCallback callback

异步刷新token,原则上不会弹出认证页面。MSAL库内部会判断是否是否需要刷新token:

①如果持有的refresn_token时效,才会弹出认证页面让用户重新登录。

②如果持有的refresh_token有效,且在token有效期内,直接返回当前token。

③如果持有的refresh_token有效,超过了token有效期,直接返回新的token。

acquireTokenSilent

入参:

@NonNull final Activity activity,
@NonNull final String[] scopes,
@NonNull final AuthenticationCallback callback

同步刷新token,具体操作同上。当然还有一个返回类型是IAuthenticationResult的acquireTokenSilent(),

多账户接口IMultipleAccountPublicClientApplication内部维系着一个账户队列(IAccount队列),没有signIn和signOut方法,只需要在调用acquireTokenXXX相关方法时传入指定的账号IAccount即可。形式上和ISingleAccountPublicClientApplication最大的区别就是账号的指定。常用的API有如下几个:

getAccounts()

<
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值