第三章 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,
|
|
signOut 入参: @NonNull final SignOutCallback callback |
异步登出账户,当然还有同步方法,是一个无入参且返回值为boolean类型的signOut()。这里的登出是真正的退出登录状态。 |
acquireTokenSilentAsync 入参: @NonNull final String[] scopes, |
异步刷新token,原则上不会弹出认证页面。MSAL库内部会判断是否是否需要刷新token: ①如果持有的refresn_token时效,才会弹出认证页面让用户重新登录。 ②如果持有的refresh_token有效,且在token有效期内,直接返回当前token。 ③如果持有的refresh_token有效,超过了token有效期,直接返回新的token。 |
acquireTokenSilent 入参: @NonNull final Activity activity, |
同步刷新token,具体操作同上。当然还有一个返回类型是IAuthenticationResult的acquireTokenSilent(), |
多账户接口IMultipleAccountPublicClientApplication内部维系着一个账户队列(IAccount队列),没有signIn和signOut方法,只需要在调用acquireTokenXXX相关方法时传入指定的账号IAccount即可。形式上和ISingleAccountPublicClientApplication最大的区别就是账号的指定。常用的API有如下几个:
getAccounts() |
< |