【问题标题】:Issue when implementing "Resource Owner Password Credentials Grant"实施“资源所有者密码凭据授予”时的问题
【发布时间】:2017-08-27 08:49:23
【问题描述】:

我尝试在 Azure AD 场景中实施“资源所有者密码凭据授予”。

我有一个 web api (DemoWebApi) 和一个控制台 (DemoConsole) 声明为本机应用程序。 我能够使“授权代码授予”和“客户端凭据授予”工作,但我遇到了“资源所有者密码凭据授予”的一些问题。

首先我读到这个: http://www.cloudidentity.com/blog/2014/07/08/using-adal-net-to-authenticate-users-via-usernamepassword/

尤其是 NO MSA 部分。

所以我在 Azure AD 租户中创建了一个用户,现在我收到以下错误消息:

用户或管理员未同意使用 ID 为“bd274da6-80f2-458a-b74b-...”的应用程序。为此用户和资源发送交互式授权请求。

我不知道该怎么办

这是我的源代码:

string authority = "https://login.microsoftonline.com/7dda5ce2-2fb6-4f82-bc27-..."; 

AuthenticationContext authenticationContext = new AuthenticationContext(authority, false);
UserPasswordCredential credentials = new UserPasswordCredential(login, password);
AuthenticationResult res = await authenticationContext.AcquireTokenAsync(webApiClientId, consoleClientId, credentials);

【问题讨论】:

    标签: c# oauth oauth-2.0 azure-active-directory adal


    【解决方案1】:

    如果您将它用作例如 LoginController 操作以提供您的自定义登录屏幕,那么值得阅读我在处理它时遇到的一个场景。

    即使密码不正确,资源所有者密码凭据流令牌也会发出

    在为正确密码成功分配令牌后。

    您可能需要调用登录控制器来获取访问令牌才能对用户进行身份验证。现在,当您第一次通过 AuthenticationContext 获取访问令牌时(通过提供所有必需的信息,例如客户端 ID、资源 ID、租户、凭据)并且您再次想要获取访问令牌但这次用户提供了错误的密码但正确的客户端id ,Azure AD 仍然提供对象的访问令牌。沃拉!!!! 我遇到过这个问题,我已经制作了 5-10 次这个场景以确保这确实发生了。

    根据我对 Azure AD 的理解,我得出的结论是,Azure AD 将访问令牌存储在其 TokenCache 中,并且每当 AuthenticationContext 对象请求访问令牌时,它甚至在验证传入的密码凭据之前都会首先查找缓存,尽管它肯定会查找客户端 ID发行了哪个令牌。这是事情开始变得有趣的时候,您会意识到他们到底是如何为错误密码提供访问令牌的(请记住:场景是您第一次获得正确密码的访问令牌,然后下次使用错误密码时您仍然可以访问使用 AuthenicationContext 时的令牌)

    解决方案

    如果您有类似的要求,要解决此可能的问题,您需要在从 AcquireTokenAsync 方法获取 AuthenticationResult 后立即清除身份验证上下文对象的令牌缓存。

    authenticationContext.TokenCache.Clear();

    就是这样:)。

    我想这从未被记录在案,我相信这对任何致力于使用资源所有者凭据流设计自定义登录页面的人都有帮助。尽管 Azure 严格建议使用它提供的其他身份验证流程。

    【讨论】:

      【解决方案2】:

      您需要提供更多信息来帮助我们重现问题,例如,您如何注册应用程序,使用 azure 门户、powershell 或 Visual Studio。新添加的用户的用户类型是什么以及如何添加那个用户。

      如果用户名和密码直接传递,用户没有任何机会提供同意。要解决这个问题,您可以尝试在门户中授予该 api 的权限(使用管理员帐户更好地登录):

      【讨论】:

        猜你喜欢
        • 2018-05-25
        • 2019-02-19
        • 2014-09-02
        • 1970-01-01
        • 2015-05-30
        • 2016-12-31
        • 1970-01-01
        • 2016-07-19
        • 2016-03-03
        相关资源
        最近更新 更多