使用 Microsoft 在 Android 应用程序中重定向 URL
Posted
技术标签:
【中文标题】使用 Microsoft 在 Android 应用程序中重定向 URL【英文标题】:Redirect URL in Android app using Microsoft 【发布时间】:2021-08-07 18:44:16 【问题描述】:我目前正在开发一个需要 Microsoft 身份验证功能及其 API Graph 的 android 应用程序。目标是为用户提供使用 Graph 在同一租户(即大学)中找到朋友的可能性。
但是,对于必须在 Azure 应用注册中添加的重定向 URL,我实际上并不了解。我的同事无法使用我在 Azure 提供的 JSON 中指定的 URL 提出请求:
"client_id" : "a50XXXXXXXX",
"authorization_user_agent" : "BROWSER",
"redirect_uri" : "msauth://com.example.myfirstapp/OizXXXXXXXXXX",
"broker_redirect_uri_registered" : true,
"account_mode" : "SINGLE",
"authorities" : [
"type": "AAD",
"audience":
"type": "AzureADMyOrg",
"tenant_id": "8b8XXXXXXXXXXX"
]
所有开发人员都必须根据他们的项目签名指定不同的重定向 URL 吗?这似乎很奇怪,因为一旦生产中的应用程序启动,将只有一个重定向 URL ...
为了让事情更清楚,我按照这个关于根据 android 应用程序开发使用 Graph 和 MSAL 的教程进行操作: Microsoft Tutorial
但是,当同事克隆 repo 并运行应用程序时,他们会收到关于 false redirect_uri 的错误。他们必须计算项目的哈希签名并在 Microsoft Azure 上注册此重定向 uri。
这是用于计算哈希签名的代码部分:
try
val info = packageManager.getPackageInfo(
"com.example.myfirstapp",
PackageManager.GET_SIGNATURES)
for (signature in info.signatures)
val md = MessageDigest.getInstance("SHA")
md.update(signature.toByteArray())
Log.d("KeyHash", "KeyHash:" + Base64.encodeToString(md.digest(),
Base64.DEFAULT))
catch (e: PackageManager.NameNotFoundException)
Log.d("LOGIN_TAG","NameNotFoundException")
catch (e: NoSuchAlgorithmException)
Log.d("LOGIN_TAG","NoSuchAlgorithmException")
【问题讨论】:
能否分享一下你提出请求时的错误信息。 一个重定向 URL 用于一个应用程序。只需指定相同的签名哈希和重定向 URL 就可以了。请按照@ChethanM 的建议分享错误消息。 好的,这是我在运行应用程序时遇到的错误:com.microsoft.identity.client.exception.MsalClientException: The redirect URI in the configuration file doesn't match with the one generated with package name and signature hash. Please verify the uri in the config file and your app registration in Azure portal.
为了让事情更清楚,我的同事克隆了存储库并在同一分支上使用了相同的实例。但是,根据 [Microsoft Tutorial]docs.microsoft.com/en-us/azure/active-directory/develop/… 我们需要指定项目的哈希签名
您的同事是否生成了新的签名哈希和重定向 URL 并在应用注册和项目中进行了配置?还是直接运行项目而不做任何更改?
首先,他们使用与我相同的文件运行项目。由于之前的错误,他们必须生成新的签名哈希,在 Microsoft AD 上指定这些签名,修改 JSON 配置文件并重新运行。然后,它起作用了......
【参考方案1】:
让我们正确地解释问题。在 Azure 端口注册应用时,实际上有两种不同的哈希值。
一个用于开发应用程序,所有开发人员都必须指定自己的签名,因为他们的环境不同。 一个用于在生产中发布您的应用程序。这种散列是唯一的,所有开发者都可以使用相同的散列。对于 Android 应用,Android Studio 将计算一个调试密钥,这在生产模式下发布时不是我们想要的。上面提供的代码部分计算了一个调试哈希,该哈希实际上与微软调用的开发哈希签名相关联。
在 Azure 端口上显示的面板屏幕截图下方,您可以在其中找到这两个哈希值:
Microsoft Azure Panel 最后,请注意您想要什么以及 Microsoft 提供什么。
【讨论】:
以上是关于使用 Microsoft 在 Android 应用程序中重定向 URL的主要内容,如果未能解决你的问题,请参考以下文章
将 Android 应用程序从 Android Studio 移植到 Microsoft Visual Studio
IndexedDB 不适用于 Microsoft Teams 的 Android 应用程序
阅读Microsoft Word文档时出现Android Apache POI错误:org.apache.xmlbeans.SchemaTypeLoaderException无法解析句柄的类型(代码片
全新的多合一Microsoft Office移动版应用套件即将出现