android10热点验证身份,在 Android 上使用 Microsoft 进行身份验证

这篇博客介绍了如何使用OAuth提供方对象在Firebase中实现身份验证,并特别讨论了与MicrosoftGraphAPI的集成。在登录流程中,要注意避免在监听器中引用Activity,因为这可能导致界面被回收。通过检查pendingAuthResultTask是否存在来处理可能的后台登录结果。成功登录后,可以从OAuthCredential对象获取OAuth访问令牌和ID令牌,这些令牌可用于调用MicrosoftGraphAPI获取用户信息和照片等数据。对于Microsoft的ID令牌,建议使用oid声明字段而非sub声明来匹配用户标识。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

使用 OAuth 提供方对象进行 Firebase 身份验证。请注意,与其他 FirebaseAuth 操作不同,此操作会弹出自定义 Chrome 标签页,从而控制您的界面。因此,请不要在您附加的 OnSuccessListener 和 OnFailureListener 中引用您的 Activity,因为当该操作启动界面时,它们会立即分离。

您应该首先检查是否已收到响应。通过这种方法登录时,您的 Activity 将位于后台,这意味着系统可以在登录流程中将其回收。为了确保发生这种情况时不让用户进行重试,您应该检查结果是否已经存在。

如需检查是否存在待处理的结果,请调用 getPendingAuthResult:

Task pendingResultTask = firebaseAuth.getPendingAuthResult();

if (pendingResultTask != null) {

// There's something already here! Finish the sign-in for your user.

pendingResultTask

.addOnSuccessListener(

new OnSuccessListener() {

@Override

public void onSuccess(AuthResult authResult) {

// User is signed in.

// IdP data available in

// authResult.getAdditionalUserInfo().getProfile().

// The OAuth access token can also be retrieved:

// authResult.getCredential().getAccessToken().

// The OAuth ID token can also be retrieved:

// authResult.getCredential().getIdToken().

}

})

.addOnFailureListener(

new OnFailureListener() {

@Override

public void onFailure(@NonNull Exception e) {

// Handle failure.

}

});

} else {

// There's no pending result so you need to start the sign-in flow.

// See below.

}

如需启动登录流程,请调用 startActivityForSignInWithProvider:

firebaseAuth

.startActivityForSignInWithProvider(/* activity= */ this, provider.build())

.addOnSuccessListener(

new OnSuccessListener() {

@Override

public void onSuccess(AuthResult authResult) {

// User is signed in.

// IdP data available in

// authResult.getAdditionalUserInfo().getProfile().

// The OAuth access token can also be retrieved:

// authResult.getCredential().getAccessToken().

// The OAuth ID token can also be retrieved:

// authResult.getCredential().getIdToken().

}

})

.addOnFailureListener(

new OnFailureListener() {

@Override

public void onFailure(@NonNull Exception e) {

// Handle failure.

}

});

成功完成后,可以从返回的 OAuthCredential 对象检索与提供方关联的 OAuth 访问令牌。

使用 OAuth 访问令牌,您可以调用 Microsoft Graph API。

与 Firebase Authentication 支持的其他提供方不同,Microsoft 不提供照片网址,您必须通过 Microsoft Graph API 来请求个人资料照片的二进制数据。

除了 OAuth 访问令牌,您还可以从 OAuthCredential 对象检索用户的 OAuth ID 令牌。ID 令牌中的 sub 声明取决于具体应用,该声明与 Firebase Auth 所使用的可通过 user.getProviderData().get(0).getUid() 访问的联合用户标识不匹配。应改用 oid 声明字段。使用 Azure AD 租户登录时,oid 声明将完全匹配。不过,对于非租户,系统将填充 oid 字段。对于联合 ID 4b2eabcdefghijkl,oid 的格式为 00000000-0000-0000-4b2e-abcdefghijkl。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值