iOS 上针对 Azure Graph API 的非交互式登录(缓存凭据)
Non-interactive login (cached credentials) against Azure Graph API on iOS
我正在 iOS 上创建一个应用程序,它将 运行 处于 "kiosk" 模式。该应用程序的一部分要求用户能够搜索组织的目录。我想通过 Azure Graph API 支持 Azure AD 以提供此功能。
我不想在应用程序启动时要求交互式登录,也不想使用额外的网络服务;我希望 iOS 应用程序能够通过 REST 访问 Azure Graph API。
我知道与缓存凭据相关的风险,但是使用 "service accounts" 进行非交互式登录已经相当成熟,访问是只读的,凭据可以在 iOS钥匙扣。
我查看了许多 Azure 示例并阅读了文档,似乎提供我需要的方法 acquireToken(resource, credential)
在 iOS ADAL 库中不可用(并且是ClientCredential
class).
澄清一下,这是我希望我的应用程序的工作方式:
- 用户从应用商店安装应用并且运行第一次安装
- 作为设置的一部分,他们通过提供租户、应用程序客户端 ID 和应用程序密钥向 Azure AD 进行身份验证。如果他们无法使用应用程序密钥进行身份验证,则可以接受用户 id/password,只要:
- 他们永远不会收到再次验证的提示
这里有解决方案还是我放弃 Azure AD?
这可以完成,但不能使用 ADALiOS 框架,因为它不会公开使其工作所需的 client_credentials
授权。
我能够使用 p2/OAuth. The sample app is here
构建一个工作演示
构建工作解决方案的步骤是:
- 登录旧版 Azure Management portal 和 select 您的 Azure AD 实例
- 在该 AD 实例中创建一个新应用程序
- Select "Add an application my organisation is developing"
- 给它起个名字然后select"Web application and/or Web API"不"Native Client Application"
- 输入登录 url 和应用 ID url 的值。这些需要是格式正确的 URL,但不需要可以访问
- 创建应用程序后select "Configure"。请注意 客户端 ID - 您将需要这个
- 在"Keys"selection中,select1或2年下拉,然后点击"Save"
- 显示密钥后,将其复制并保存在某处;无法再次显示
- 设置所需的 "Permissions to other applications" 以允许您的应用获得所需的访问权限
- 最后,在屏幕底部单击 "view endpoints" - 您需要复制 OAuth 2.0 令牌端点和 OAuth 2.0 授权端点
- 从 GitHub 下载演示代码
- 运行
pod install
- 将值插入
Settings.plist
文件
- 运行 应用
身份验证过程的核心是设置 OAuth2ClientCredentials
-
的实例
let settings = [
"client_id": appData.clientId!,
"client_secret": appData.secret!,
"authorize_uri": appData.authString!,
"token_uri": appData.tokenString!,
"keychain": true,
"secret_in_body": true
] as OAuth2JSON
self.oauth2 = OAuth2ClientCredentials(settings: settings)
然后可以调用doAuthorize()
获取token
self.oauth2.doAuthorize()
我正在 iOS 上创建一个应用程序,它将 运行 处于 "kiosk" 模式。该应用程序的一部分要求用户能够搜索组织的目录。我想通过 Azure Graph API 支持 Azure AD 以提供此功能。
我不想在应用程序启动时要求交互式登录,也不想使用额外的网络服务;我希望 iOS 应用程序能够通过 REST 访问 Azure Graph API。
我知道与缓存凭据相关的风险,但是使用 "service accounts" 进行非交互式登录已经相当成熟,访问是只读的,凭据可以在 iOS钥匙扣。
我查看了许多 Azure 示例并阅读了文档,似乎提供我需要的方法 acquireToken(resource, credential)
在 iOS ADAL 库中不可用(并且是ClientCredential
class).
澄清一下,这是我希望我的应用程序的工作方式:
- 用户从应用商店安装应用并且运行第一次安装
- 作为设置的一部分,他们通过提供租户、应用程序客户端 ID 和应用程序密钥向 Azure AD 进行身份验证。如果他们无法使用应用程序密钥进行身份验证,则可以接受用户 id/password,只要:
- 他们永远不会收到再次验证的提示
这里有解决方案还是我放弃 Azure AD?
这可以完成,但不能使用 ADALiOS 框架,因为它不会公开使其工作所需的 client_credentials
授权。
我能够使用 p2/OAuth. The sample app is here
构建一个工作演示构建工作解决方案的步骤是:
- 登录旧版 Azure Management portal 和 select 您的 Azure AD 实例
- 在该 AD 实例中创建一个新应用程序
- Select "Add an application my organisation is developing"
- 给它起个名字然后select"Web application and/or Web API"不"Native Client Application"
- 输入登录 url 和应用 ID url 的值。这些需要是格式正确的 URL,但不需要可以访问
- 创建应用程序后select "Configure"。请注意 客户端 ID - 您将需要这个
- 在"Keys"selection中,select1或2年下拉,然后点击"Save"
- 显示密钥后,将其复制并保存在某处;无法再次显示
- 设置所需的 "Permissions to other applications" 以允许您的应用获得所需的访问权限
- 最后,在屏幕底部单击 "view endpoints" - 您需要复制 OAuth 2.0 令牌端点和 OAuth 2.0 授权端点
- 从 GitHub 下载演示代码
- 运行
pod install
- 将值插入
Settings.plist
文件 - 运行 应用
身份验证过程的核心是设置 OAuth2ClientCredentials
-
let settings = [
"client_id": appData.clientId!,
"client_secret": appData.secret!,
"authorize_uri": appData.authString!,
"token_uri": appData.tokenString!,
"keychain": true,
"secret_in_body": true
] as OAuth2JSON
self.oauth2 = OAuth2ClientCredentials(settings: settings)
然后可以调用doAuthorize()
获取token
self.oauth2.doAuthorize()