【问题标题】:Getting user info from Azure API App when authenticated via browser form通过浏览器表单进行身份验证时从 Azure API 应用程序获取用户信息
【发布时间】:2015-05-29 15:25:45
【问题描述】:

当使用 Postman 在 Chrome 和 x-zumo-auth 标头中进行身份验证时,我的 API 应用程序使用控制器中的以下代码成功识别了用户的 upn:

Runtime runtime = Runtime.FromAppSettings(Request);
EmaUserInfo user = runtime.CurrentUser;
TokenResult token = await user.GetRawTokenAsync("aad");
string upn = token.Claims[ClaimTypes.Upn];

但是,当使用 Microsoft 的 AzureCards 控制台客户端示例中的代码(将浏览器添加到表单窗口并捕获 zumo 令牌)时,我无法获取用户的 aad 令牌并从 API 应用程序中获得以下错误:

Request to https://[gateway].azurewebsites.net/api/tokens?tokenName=aad&api-version=2015-01-14 GET failed BadRequest 400 (Bad Request)
{
  "status": 400,
  "source": "https://[gateway].azurewebsites.net/api/tokens?tokenName=aad&api-version=2015-01-14",
  "message": "Microservice '[API App]' only has permissions for token ''. Can't get token 'aad'"
}

有趣的是,这甚至发生在我设置断点并将 zumo 令牌从我的测试程序复制到邮递员时。程序失败,邮递员成功返回。据我所知,他们发送的请求完全相同。我可能会错过什么?

编辑: 我做了更多测试,发现 Postman 方法在隐身模式下会产生相同的错误。这让我相信,不仅需要设置 x-zumo-auth 标头,还需要设置一些 cookie 以使用户正常工作。如果我生成令牌,从 apiapp url 中删除 cookie 并仅使用令牌发布请求,我也会收到错误。

【问题讨论】:

    标签: c# authentication azure azure-api-apps


    【解决方案1】:

    API 应用程序应该有一个:authentication" 数组,如下所示:

    "authentication": [{"type": "aad"}]
    

    你最终的 apiapp.json 应该是这样的:

    {
    "$schema": "http://json-schema.org/schemas/2014-11-01/apiapp.json#",
    "id": "YourApiApps",
    "namespace": "microsoft.com",
    "gateway": "2015-01-14",
    "version": "1.0.0",
    "title": "YourApiApps",
    "summary": "",
    "author": "",
    "endpoints": {
        "apiDefinition": "/swagger/docs/v1",
        "status": null
    },
    "authentication": [{"type": "aad"}]}
    

    那么,请重新部署并再次检查。它应该可以解决问题。

    【讨论】:

    • 这也不起作用,但我已经用更多信息更新了我的问题。看来,为了访问,我只需要 x-zumo-auth 标头,但如果我想对用户做任何事情,我需要一些 cookie。
    • cookie 也被命名为 x-zumo-auth。如果您在 Chrome 上打开 Fiddler2 或开发工具并转到资源 -> Cookies,您将在那里看到它以及 Affinity cookie。发生的情况是,当标头存在时,您会被重定向并与 Cookie 一起返回。然后你必须在每个请求中包含 cookie。在提琴手它看起来像: Cookie: x-zumo-auth=eyuakdfkasdkfk235asdf...
    • 我在 microsoftaccount 上遇到了同样的问题,并且将该行添加到 apiapp.json 文件中就可以了。谢谢!
    • 这个生效有延迟吗?我已将此添加到我的 apiapp.json 并在远程目录中正确显示,但我仍然收到“微服务仅具有令牌''的权限。”
    • 你必须重启网关。
    猜你喜欢
    • 1970-01-01
    • 2020-02-28
    • 2017-03-03
    • 2019-08-08
    • 1970-01-01
    • 2018-11-12
    • 2013-04-28
    • 2017-02-21
    • 1970-01-01
    相关资源
    最近更新 更多