如何在邮递员中集成Amazon Cognito登录

Sha*_* PC 10 postman amazon-cognito

我正在使用Amazon Cognito用户池进行登录。访问Web应用程序时,我将重定向到

https://<domain>.auth.<region>.amazoncognito.com/login?response_type=code&client_id=<client id>&redirect_uri=<callback> . 
Run Code Online (Sandbox Code Playgroud)

使用池中的用户名/密码登录后,将使用代码作为查询参数将我重定向到回调URL。我可以用它来获取令牌。如何将其集成到邮递员中,以便可以将令牌用于即将到来的请求

yle*_*lev 23

伊尔。

感谢 Robert Jordan 的上述 postman OAuth2.0 配置帖子。

我将尝试在此处介绍整个 Cognito 用户池定义部分,以使其更容易。

好的,

打开 Cognito 控制台并按照以下步骤操作:

1)创建新的用户池

name: Test1
left panel menu->Attributes
Run Code Online (Sandbox Code Playgroud)

选择以下单选按钮:

o Email address or phone number - Users can use an email address or phone number as
  their "username" to sign up and sign in.
   o Allow email addresses   
Run Code Online (Sandbox Code Playgroud)

和复选框:

[v] email
[v] name
Run Code Online (Sandbox Code Playgroud)

截屏:

在此处输入图片说明

按[创建池]按钮。(如果向导尚不可用 - 按左侧面板菜单上的 [查看详细信息] 选项)

2) 左侧面板菜单->App Clients

按:[添加应用程序客户端]

应用客户端名称:me1

清除所有复选框,但:

[v] Enable username password based authentication (ALLOW_USER_PASSWORD_AUTH)
Run Code Online (Sandbox Code Playgroud)

保持单选按钮不变:

o Enabled (Recommended)
Run Code Online (Sandbox Code Playgroud)

截屏:

在此处输入图片说明

按[创建应用程序客户端]

3) 复制并保留“App 客户端 ID”

这是一个类似于 5psjts111111117jclis0mu28q 的字符串格式

截屏:

在此处输入图片说明

4) 左侧面板菜单->App Client 设置

Enabled Identity Providers: [v]Select all
[v] Cognito User Pool
Run Code Online (Sandbox Code Playgroud)

回调 URL(s): 把 api gw url 或https://www.google.com/

OAuth 2.0
 Allowed OAuth Flows
   [v] Implicit grant
 Allowed OAuth Scopes
   [v] openid
Run Code Online (Sandbox Code Playgroud)

截屏:

在此处输入图片说明

5) 左侧面板菜单->域名

在前缀字段中放置一个字符串,例如:music123456789

使用“检查”按钮检查是否可用。

您现在的域名是:https : //music123456789.auth.us-east-1.amazoncognito.com

截屏:

在此处输入图片说明

6) 左侧面板菜单->用户和组

按[创建用户]

用户名(必填):Your.Mail@company.com

清除所有 [v] 复选框

临时密码:xx123456!

电子邮件:Your.Mail@company.com

7) 在邮递员

按新请求

进入“授权”选项卡

选择类型:OAuth 2.0

按【获取新的访问令牌】按钮并填写:

代币名称:myToken123

授予类型:从列表框中选择“隐式”

  1. 回调 URL:https : //www.google.com/
    (如第 4 条或在 Cognito 控制台->应用程序集成->应用程序客户端设置中)

  2. Auth URL:https :
    //music123456789.auth.us-east-1.amazoncognito.com/login(如第5条+'/login'后缀,你在cognito控制台->应用集成->域名中定义的)

  3. 客户端 ID:5psjts343gm7gm7jclis0mu28q(应用程序客户端 ID - 如 3,

您在 cognito 控制台-> 常规设置-> 应用程序客户端中定义的内容)

  1. 范围:openid(如在 4 中,您在 cognito 控制台-> 应用程序客户端设置-> 允许的 OAuth 范围中定义的内容)

COGNITO 到 OKTA idp 配置

将 Cognito 连接到 Okta IDP 时,配置应如下所示:

Okta 设置 在此处输入图片说明

认知设置 在此处输入图片说明

邮递员设置 在此处输入图片说明


Rob*_*dan 16

我有一个这样做的例子...在此处输入图片说明

  1. 在Cognito用户池控制台中的“应用程序集成/应用程序客户端设置”下定义的回调URL。
  2. 您域的登录端点的URL。这将位于Cognito用户池/应用集成/域名下
  3. 客户端ID位于Cognito用户池/常规设置/应用程序客户端下
  4. 列出要包含在访问令牌中的范围。这些必须在Cognito用户池/应用程序集成/应用程序客户端设置下启用。这些可以是标准范围,也可以是自定义范围。自定义作用域在“应用程序集成/资源服务器”下定义,并且必须包含资源服务器ID(例如https://myresource.com/myscope
  5. 点击请求令牌 在此处输入图片说明

现在,您可以登录到您的Cognito用户池并获得访问令牌!问题在于,一旦获得了访问令牌,它就无法在Postman中使用,因为Cognito希望它是裸露的,而Postman会自动在令牌中添加“ Bearer”:在此处输入图片说明 令牌可以在cURL中使用: curl -i -H "Authorization: dyJraWQiOiI1YVcwTUlqN1hBaHg4Yzh4Q3JNT2RsQjhZWjlCR3NQOE9BbkFlVFJtUklRPSIsImFsZyI6IlJTMjU2In0.eyJzdWIiOiI3YmEwZmMzOC01ZDcwkYS05MTI5ZTBmYTUzNTEiLCJ0b2tlbl91c2UiOiJhY2Nlc3MiLCJzY29wZSI6Imh0dHBzOlwvXC9hcGkubXk5MC5jb21cL3BvbGljZURlcGFydG1lbnRzLnJlYWQiLCJhdXRoX3RpbWUiOjE1NDA1OTIzMTYsImlzcyI6Imh0dHBzOlwvXC9jb2duaXRvLWlkcC51cy1lYXN0LTEuYW1hem9uYXdzLmNvbVwvdXMtZWFzdC0xX2xIbGo4NXpRYSIsImV4cCI6MTU0MDU5NTkxNiwiaWF0IjoxNTQwNTkyMzE2LCJ2ZXJzaW9uIjoyLCJqdGkiOiJhN2JiOWU2MC1kNmY1LTQ3ODYtODMwYi0xODdkZDZmYTZlODAiLCJjbGllbnRfaWQiOiI2MzhlYmZ1dTdiZDRkMXVkYnRzY2pxcnJncyIsInVzZXJuYW1lIjoicm9qbyJ9.O_GAxfFX3IQfLUu5Hxr05Wrk_2QDwNSL8tvDdEU0Dzs9d1XhQPafT6ney6yiGnKPOwsO8HhWdbT1QdDmByjuwQAURf1Da4Au7c-yhfgJcqWuHWZ4mledTSP8ukXqihMb4PoaDdU4JXyOdMLa50dBXVMgJNyXTpIulWOxFhiTW6DeQbnxNDk94cGNz_CTKCEqKStiloFZfLR7ndSrWqdOQ_SU__YV0RyKXZyK5yguv3nkUcI6cuKpbPVIZ5DNdpufbrtOLuZcC6HePBKrbTKjSZCt5-swy3YrwnY4ApTX7QUFzof6FylWaLA_KVP3Zv6ksSJ_IjBMFH1NRVHh4lbsOA" \ https://xxxxx.execute-api.us-east-1.amazonaws.com/v1/myresource/1234

  • 如果您找不到“获取新访问令牌”对话框,它位于“授权”选项卡下,您需要将“类型”更改为“OAuth 2.0”。 (6认同)
  • 有没有办法使登录过程自动化?我可以手动登录,但这不是可行的解决方案,因为我希望在Postman中进行全自动测试。 (4认同)
  • 谢谢。我发现的问题是令牌由两个字段组成:访问令牌和ID令牌。Postman 使用访问令牌,但正确使用的是 ID 令牌 (2认同)

jsp*_*lla 8

对于那些想要从已弃用的“隐式”授予转向推荐的“授权”又名“授权代码”授予的人,您需要在 Postman 中拥有以下内容:

授权类型:授权代码(如果代码在传输过程中被截获,带有 PKCE 的授权代码将阻止其他人使用该代码,但是或者...您可能希望从让“授权代码”正常工作开始。)

回调 URLhttps://oauth.pstmn.io/v1/callback(或者当您选中“使用浏览器授权”时 Postman 设置的任何值)

身份验证 URL:https://{app name you chose when creating the custom auth domain}.auth.{aws region}.amazoncognito.com/login例如https://myapp.auth.us-east-1.amazoncognito.com/login。您可以在 AWS 控制台 -> Cognito -> 用户池 -> 应用程序集成选项卡 ​​-> 域部分 -> Cognito 域中找到它(如果您还没有自定义域,请使用操作下拉列表创建自定义域)。

访问令牌 URL:https://{app name}.auth.{aws region}.amazoncognito.com/oauth2/token例如https://myapp.auth.us-east-1.amazoncognito.com/oauth2/token

客户端 ID:与“应用程序客户端”对应的客户端 ID(例如,Web 应用程序用户将通过 Cognito 进行身份验证才能使用),可在 AWS 控制台 -> Cognito -> 用户池 -> 应用程序集成选项卡 ​​-> 应用程序客户端列表中找到部分 -> 应用程序客户端。

客户端秘密:可选的附加安全措施。切勿将其发送到 Web 应用程序,因为恶意用户可能会通过 Chrome 开发工具等提取客户端密钥。但是,您可以(并且应该)将客户端密钥与后端应用程序一起使用,例如支持前端 Web 应用程序的 API 服务。这是在 Cognito 用户池中创建应用程序客户端时必须在 AWS 中做出的决定,但不要担心 - 如果您改变主意或选择错误的设置,应用程序客户端很容易创建/删除/重新创建。

范围:OAuth 使用“范围”作为定义持有和使用访问令牌的应用程序(例如某些 Web 应用程序)可以代表其所使用的帐户的用户执行/访问的内容的方法。它类似于网络应用程序中的授权(例如,只有“admin”组中的用户可以访问设置页面),但它意味着针对用户元数据的授权,因此通常表现为应用程序有权访问的用户元数据,例如用户的日历或联系人或电话号码。OAuth 范围并不意味着取代应用程序的授权系统(例如 RBAC),因此如果您只是制作一些 Web 应用程序并且只需要 Cognito 处理用户注册、存储和重置用户密码等。您或多或少可以忽略 OAuth “范围”,尽管您可能应该将 Postman 中的“范围”值设置为“ openid email”之类的值 ”之类的值(范围由单个空格分隔,如果不请求“openid”,您就无法请求和获取“电子邮件”范围") 因此您至少可以在访问令牌中获取用户的电子邮件地址,以便与应用程序数据库中的“用户”表进行比较。在您的 Web 应用程序与实际第三方(而不是您自己的 Cognito 用户池)(例如 Facebook 或 Google)进行身份验证的情况下,范围更有意义并且变得更相关。也许您正在制作一个应用程序,将用户朋友的联系数据从 Facebook 同步到.. 我不知道,下载到您计算机上用于备份目的的 CSV 文件。在这种情况下,您希望从 Facebook 的 OAuth 服务器请求“好友列表”范围或 Facebook 决定调用该范围的任何内容。另一方面,如果您只需要 Facebook 作为一种允许用户轻松登录您的应用程序而无需创建帐户的方式,则不需要 Facbeook 的“好友列表”或任何其他范围(也许只是为您提供用户电子邮件地址的范围?)。

其他领域:

  • 客户端身份验证:在正文中发送客户端凭据
  • 类型:OAuth 2.0
  • 将授权数据添加到:请求标头

资料来源:

https://www.czetsuyatech.com/2021/01/aws-generate-cognito-access-token.html
https://aws.amazon.com/blogs/mobile/understanding-amazon-cognito-user-pool-oauth -2-0-grants/
https://api.slack.com/legacy/oauth-scopes


Dan*_*ley 6

如果您的客户端支持,USER_PASSWORD_AUTH您可以使用客户端请求有效的不记名令牌aws

read -s -p "Password: " && \
    aws cognito-idp initiate-auth \
        --client-id <client id> \
        --auth-flow USER_PASSWORD_AUTH \
        --auth-parameters "USERNAME=<username>,PASSWORD=$REPLY"
Run Code Online (Sandbox Code Playgroud)

可以将其添加到授权/类型:不记名令牌下的 Postman。


Ker*_*rem 6

作为 Robert Jordan 和 ylev 的详尽解释的补充,我通过使用 id_token不是Access Token使其工作。

在此输入图像描述

在令牌详细信息页面中,复制 id_token 并将其手动添加到标头,不带 Bearer 前缀: 在此输入图像描述

来源:https://github.com/postmanlabs/postman-app-support/issues/6987


小智 1

您想要实现的用例可以通过使用OAuth 2.0授权来实现。如果你能得到Auth URL/ Access Token URLClient IDClient Secret- 你应该能够做到。

以下是我们支持的各种授权类型的文档链接,包括上述授权类型 - https://www.getpostman.com/docs/v6/postman/sending_api_requests/authorization

干杯。