gpt4 book ai didi

ios - ADAL iOS-已验证其他用户。预期的userA@mydomain.com,实际的userB@mydomain.com

转载 作者:行者123 更新时间:2023-12-01 18:13:04 25 4
gpt4 key购买 nike

我正在使用ADALiOS来访问OneDrive商业服务,并且我在帐户歧义消除后使用以下代码段对用户进行身份验证,

    ADAuthenticationContext *context = ....

[context acquireTokenWithResource:resource
clientId:clientId
redirectUri:redirectUri
promptBehavior:AD_PROMPT_ALWAYS
userId:@"userA@mydomain.com"
extraQueryParameters:@""
completionBlock:^(ADAuthenticationResult *result) {
...
}

Web身份验证UI将提示,并允许用户输入凭据以继续。这里的问题是,在此页面中,用户还可以将用户ID更改为“userB@mydomain.com”,并且将以类似“已验证不同用户的错误”的方式调用完成块。预期的userA@mydomain.com,实际的userB @ mydomain.com”。我使用ADALiOS错误吗?

最佳答案

当您指定一个userId时,ADAL会假定它已被指定,因为那确实是您想要的用户。如果结果用户不是所要求的用户,则您将看到错误。如果您不关心哪个用户已通过身份验证,则可以将nil作为userId参数传递,并且不会收到错误消息。

ADAL库出于谨慎考虑而执行此操作。尽管userId参数暗示了什么,但是当您调用ADAL时,ADAL无法保证您将为所请求的用户获得 token 。它将做到最好。如果它可以在缓存中找到该用户的 token ,则它将返回它。但是,如您所见,如果调用了交互式流,则不会阻止用户输入与要求的用户名不同的用户名。在这种情况下,将返回另一个用户的 token 。如果应用程序已将某些UI元素或 private 资源与特定的userId相关联,会发生什么?如果它得到的是与请求的用户不同的用户 token ,则可能是以对应用程序用户不明显的方式混合用户。如果用户最初以低特权用户身份登录,但随后以管理员身份登录,而应用程序没有注意到这一点,则可能会发生不良情况。因此,该库假定,如果您要求特定用户,那么这是唯一可以接受的用户。

接下来的内容可能比您需要的更多,但是为了完整起见,我将继续。不幸的是,出于三个不同的目的,userId参数已重载。

  • 作为缓存查找键。如果ADAL先前已对传递的用户进行身份验证,并且在缓存中具有该用户的 token 或刷新 token ,则它可以直接查找该 token 并避免对AAD请求的任何需求。如果您一次只认证一个用户,则不会增加任何值,因为ADAL会尝试查找对所传递资源有效的 token 。
  • 作为服务器的登录提示。 userId用于预填充用户名字段,以方便用户使用。但是,用户可以自由删除该用户名并提供其他用户名。
  • 作为家庭领域发现的提示。如果用户是联盟用户,则意味着AAD需要引用ADFS(或某些其他联盟服务器)进行身份验证,它需要一个用户名来确定应引用的服务器地址。通常,这是通过两步过程完成的。用户首先登陆AAD页面并输入其用户名。一旦用户名字段失去焦点,服务器就会查找用户名,如果它是联合用户,它将开始将其重定向到其ADFS服务器。最后,用户登陆ADFS登录页面,他们发现其用户名已经填写。输入密码并完成身份验证。但是,如果传递userId参数,则其值将传递给AAD。结果,AAD不再需要等待用户键入用户名,就可以将其直接发送到其联合身份验证服务器,从而消除一页,并允许用户直接登录。

  • 如果您需要2或3,但您不关心1,则有一种解决方法。您可以为userId指定nil,但是将“login_hint =” username“作为extraQueryParameters参数添加。将” username“替换为您将在userId参数中传递的用户名。如果执行此操作,则ADAL将忽略用户已要求,但AAD会将用户名解释为登录提示以预填充用户名字段,并解释为家庭领域发现提示。将确保用户要求的是返回用户的检查将被绕过。请注意,您可能无法获得作为登录名(login_hint)提供的用户的 token ,应确保在对用户身份或可能具有的访问权限进行任何假设之前先验证该用户。

    关于ios - ADAL iOS-已验证其他用户。预期的userA@mydomain.com,实际的userB@mydomain.com,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26694432/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com