上下文:
>
我的软件应用程序是一个多租户应用程序,客户可以登录到该应用程序并生成他们自己的客户端,以便与资源所有者密码流OAuth请求一起使用。
我们的OAuth2.0授权服务器构建在WebAPI中,并继承自Microsoft提供的Microsoft.Owin.Security.OAuth.OAuthAuthorizationServerProvider类。目前,我们只支持一个流(资源所有者密码)来获取一个令牌,看起来像:
POST /api/v1.0/token HTTP/1.1
Host: api.mysoftwareapp.com
UserName={username}&Password={password}&grant_type=password&client_id={client_id}
验证凭据和客户端ID之后,我们将发回由Microsoft.Owin.Security.Oauth.OAuthAuthorizationServerProvider基类生成的访问令牌。为了访问资源,用户需要在授权头中提供access_token作为承载令牌。不需要再次传入客户端ID。以下示例:
GET /api/v1.0/Partners HTTP/1.1
Host: api.mysoftwareapp.com
Authorization: Bearer this_is_where_the_token_goes
我希望实现Azure API管理的开发人员门户特性,允许我的客户在进行测试调用时输入他们自己的用户名、密码和客户端ID,这样他们就可以在租户的上下文中获取数据(最终--启用客户端ID的速率限制)。
在publisher门户的Security->OAuth2.0下,我已经:
我还做了以下要求,但我认为不适用,因为只支持资源所有者密码流,并通过我自己的应用程序处理客户端注册:
如何设置Azure API Management以允许用户在设置授权时也指定他们想要使用的客户端ID,或者我们是否需要更改API以便在调用特定资源时而不是在请求令牌时需要客户端ID?
这就是我需要的:
为了在POST正文中传递这些值,您需要将客户端身份验证方法从“basic”更改为“POST”。
转到Publisher Portal security,将OAuth2服务器设置修改为如下所示:
我尝试通过遵循spring sparklr2示例来设置一个OAuth2服务器。我将其修改为使用数据库UserDetailsService。当我尝试用curl交换带有密码的令牌时,如下所示: 它在加载用户findByUsername()时失败,当我查看代码时,它使用client-id(在我的例子中是'client1')作为用户名。调用堆栈为:DaoAuthenticationProvider.ret
资源所有者密码凭据(即用户名和密码),可以直接作为获取访问令牌的授权许可。这种凭据只能应该当资源所有者和客户端之间具有高度信任时(例如,客户端是设备的操作系统的一部分,或者是一个高度特权应用程序),以及当其他授权许可类型(例如授权码)不可用时被使用。 尽管本授权类型需要对资源所有者凭据直接的客户端访问权限,但资源所有者凭据仅被用于一次请求并被交换为访问令牌。通过凭据和长期有效的访问令牌或刷新令牌的
资源所有者密码凭据流现在在Azure B2C的预览中可用: https://docs.microsoft.com/en-us/azure/active-directory-b2c/configure-ropc 然而,我想修改一下声明(具体来说:将用户名作为“email”声明)。我试着用文档中的流在IEF中调用我现有的自定义策略,但他们不喜欢这样(令人惊讶) AADB2C:发生异常。 有没有办法影响
本文向大家介绍oauth 资源所有者密码凭证授予,包括了oauth 资源所有者密码凭证授予的使用技巧和注意事项,需要的朋友参考一下 示例 资源
资源所有者密码凭据许可类型适合于资源所有者与客户端具有信任关系的情况,如设备操作系统或高级特权应用。当启用这种许可类型时授权服务器应该特别关照且只有当其他流程都不可用时才可以。 这种许可类型适合于能够获得资源所有者凭据(用户名和密码,通常使用交互的形式)的客户端。通过转换已存储的凭据至访问令牌,它也用于迁移现存的使用如HTTP基本或摘要身份验证的直接身份验证方案的客户端至OAuth。 +----
应用程序需要连接到仅支持OAuth2资源所有者密码凭据授予的API。我尝试使用下面的代码,但得到的响应代码为400“错误请求”。使用相同的代码,我可以连接到一个正常的网站并检索内容。 我知道API代码是工作,因为使用邮递员工作。在邮递员中,我只是发出一个帖子请求,提供用户名、密码和grant_type,并使用x-www. form-urlencoded 连接的返回是一个json。 你知道怎么了吗?