【问题标题】:headless authentication Azure AD b2c无头身份验证 Azure AD b2c
【发布时间】:2016-05-06 11:18:20
【问题描述】:

我正在为 Azure AD b2c 寻找一种通过用户名/密码以无头方式对用户进行身份验证的方法。 Azure AD b2c 很棒,但我们认为登录重定向可能会导致客户混淆(有时甚至会被某些浏览器阻止)。此外,我们希望完全控制客户的 UX 体验。

我研究了 ADAL 和 Graph API,但还没有找到任何东西。

吉娜

【问题讨论】:

  • 如果回答了您的问题,请标记答案

标签: azure azure-ad-graph-api azure-ad-b2c


【解决方案1】:

here 所述,您可以将 Azure AD 应用程序用于服务帐户的 Client Credential Flow。它不是最佳的,但它有效。

  1. Define an Azure AD App 用于 Web API
  2. Define an Azure AD App 每个服务帐户
  3. 配置 Web API 以接受来自 B2C 租户和 Azure AD 的令牌
  4. 针对 Web API 的服务帐户 AD 应用请求访问令牌

注意:请务必在您的 B2C 租户下创建 Azure AD 应用程序。


代码片段从 C# 获取访问令牌

using (var httpClient = new HttpClient())
{
    httpClient.BaseAddress = new Uri("https://login.microsoftonline.com");

    var content = new FormUrlEncodedContent(new[]
    {
          new KeyValuePair<string, string>("grant_type", "client_credentials")
        , new KeyValuePair<string, string>("client_id", "[service account app id e.g. 10d635e5-7615-472f-8200-a81d5c87c0ca")
        , new KeyValuePair<string, string>("client_secret", "[client secret defined in the service account e.g. 5L2ZJOBK8GI1wRSgGFooHcBkAOUOj65lQd9DgJxQOrw=]")
        , new KeyValuePair<string, string>("scope", "[App ID URI of the web api azure ad app]/.default e.g. https://my-b2c-tenant.onmicrosoft.com/my-azure-ad-ap/.default")
    });

    var requestResult = await httpClient.PostAsync("/[your b2c tenant].onmicrosoft.com/oauth2/v2.0/token", content);
    var contentResult = await requestResult.Content.ReadAsStringAsync();

    var json = JObject.Parse(contentResult);
    var accessToken = (string)json["access_token"];
}

App ID URI


您可能希望定义一些自定义声明来保护 Web API。见'Application Permissions' here

  1. 在 Web API Azure AD App 上修改应用程序清单

    {
        "appRoles": [{
                "allowedMemberTypes": [
                    "Application"
                ],
                "displayName": "Some display nane",
                "id": "[create a new guid]",
                "isEnabled": true,
                "description": "Allow the application to _____ as itself.",
                "value": "the-blah-role"
            }
        ]
    }
    
  2. 将服务帐户 Azure AD 应用权限授予定义的自定义应用程序权限

授予服务帐户的权限将在 roles 声明中返回:

{
  "roles": [
    "the-blah-role"
  ]
}

请投票the user voice feedback item 让这更容易?

【讨论】:

【解决方案2】:

目前无法在没有交互式用户的情况下运行 Azure B2C。虽然我确信它会在某个时候到来,但目前,您无法创建基于 B2C 的后端应用程序。

根据Azure Active Directory B2C preview: Limitations & Restrictions

守护程序/服务器端应用程序

包含长时间运行的进程或在没有用户在场的情况下运行的应用程序也需要一种访问安全资源的方法,例如 Web API。这些应用程序可以使用 OAuth 2.0 客户端凭据流使用应用程序的身份(而不是消费者的委托身份)进行身份验证和获取令牌。此流程在 Azure AD B2C 预览版中尚不可用 - 也就是说,应用程序只能在发生交互式消费者登录流程后才能获得令牌。

【讨论】:

  • 我一直希望文档已经过时,他们会发布此功能。
  • 如果他们能继续前进并完成它,那就太好了!
  • 我假设@ginalster 用例略有不同(就像我的一样)。在那里,他让用户可以进行身份​​验证(提供用户名和密码),但他不想通过重定向 url 执行此操作。即他想在他的应用程序上构建整个用户体验
  • @Mike 实际上,ClientCredentials 用于后端授权 AFAIK。 UserCredentials 用于前端/移动授权。
  • 用户是否可以通过 AADB2C 以非交互方式注册?
【解决方案3】:

如果您想要的是无头身份验证,为什么不单独使用 Azure AD?它有一个 API。如果您打算自己创建和管理所有 UI,为什么需要或需要 AD B2C?

【讨论】:

  • 据我所知,Azure AD 仅支持特定于域的电子邮件地址 (johndoe@mydomaincom) 而不是客户的特定电子邮件地址 (janedoe@hotmail, janedoe@somedomain.net...)。我希望 Azure AD B2C 能够很快实现真正的 API 身份验证/控制。其他 CIAM 服务,如 LoginRadius,已经允许这样做。
【解决方案4】:

Azure AD B2C 不能提供无头身份验证,但可以结合 自定义旅程
虚荣域 和自定义样式 用户可能永远不会离开您的网站

【讨论】:

  • 您有更多关于虚域的信息吗?
  • 我认为您需要直接联系 Azure,因为在 Azure 重定向到您的网站之前需要通过 DNS 重定向名称更改内容
【解决方案5】:

您要查找的是 azure AD b2c 中的 OWIN 的资源所有者密码凭据。您可以参考 https://feedback.azure.com/forums/169401-azure-active-directory/suggestions/13817784-add-support-for-resource-owner-password-credentialupvote 以实现此功能

【讨论】:

【解决方案6】:

仍处于预览阶段(截至 2018 年 1 月),但如果您使用的是 Azure Functions,这可能就是您正在寻找的内容。看看Microsoft Graph bindings for Azure Functions

【讨论】:

    猜你喜欢
    • 2019-06-25
    • 1970-01-01
    • 1970-01-01
    • 2020-08-26
    • 1970-01-01
    • 2016-04-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多