Azure API管理OAuth 2.0资源所有者密码流客户端ID

时间:2017-01-18 21:31:41

标签: api azure oauth azure-api-management

背景:

  • 我的软件应用程序是一个多租户应用程序,客户可以登录并生成自己的clientID,以便与资源所有者密码流OAuth请求一起使用。

  • 我们的OAuth 2.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基类生成的访问令牌。为了访问资源,用户需要在Authorization标头中提供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启用速率限制)。

在发布商门户网站的Security-> OAuth 2.0下,我已经:

  • 仅检查资源所有者密码授予类型。
  • 将我的授权请求方法指定为POST。
  • 添加了我的令牌端点网址。
  • 添加了grant_type / password作为附加的body参数。
  • 将资源所有者密码凭据留空。

我已经完成了以下操作,因为它们是必需的,但我认为不适用,因为只支持资源所有者密码流,并通过我自己的应用程序处理客户端注册:

  • 添加了我的授权终结点网址。
  • 选择“在正文中”作为我的客户端身份验证方法。
  • 添加了假客户端凭据。
  • 添加了虚假的客户注册页网址。

以下是截图: enter image description here

当我导航到开发人员门户并查看端点时,我可以在我的Auth服务器下选择“Resource onwer password”。但是,当我选择此选项时,弹出窗口显示只允许我输入我的用户名和密码,而不是我的客户端ID。

如何设置Azure API管理以允许用户在设置授权时也指定他们想要使用的客户端ID - 或者我们是否需要在调用特定资源时更改我们的API以要求客户端ID而不是在申请令牌时?

这就是我需要的:

Screenshot of what I'm looking for.

1 个答案:

答案 0 :(得分:1)

为了在POST正文中传递这些值,您需要从" basic"更改客户端身份验证方法。到"发布"。

转到Publisher Portal安全性,并将OAuth2服务器设置修改为如下所示:

enter image description here