标签: azure-ad-b2c

将 B2C 回复 URL 从“signin-oidc”更改为其他内容不起作用

我正在尝试使用 Azure AD B2C 运行ASP.NET Core 2.1 Web 应用程序。我在经过大量研究(以及更多的试验和错误)之后运行了这个,因为文档中的说明有点偏离。

登录/注册过程使用项目设置向导期间的默认脚手架,以及新的Microsoft.AspNetCore.Authentication.AzureADB2C.UI Nuget,从而在启动过程中提供简化但“封闭式”的体验。

目前的问题是,我无法使用与“signin-oidc”不同的自定义回复 URL 来完成这项工作。我已经读过“signin-oidc”以某种方式嵌入到提供程序中,因此是默认设置。

我定义OnboardingController了一个Start操作,我希望用户在注册后登陆,所以我做了以下操作:

  • A) 我测试了 Url 是否localhost:12345/Onboarding/Start有效。页面显示正确。
  • B) 在 appsettings.json 中,我将 AzureAdB2C 更改"CallbackPath": "/signin-oidc""CallbackPath": "/Onboarding/Start" 应用程序设置
  • C) 我转到租户并将应用程序的回复 URL 更改为localhost:12345/Onboarding/Start. 重要提示:与 ADB2C 示例和指南不同,您必须在回复 URL 后附加 signon-oidc 或自定义请求路径!本地主机:12345 还不够! 租户配置

    我可以确认身份验证有效:Microsoft.AspNetCore.Authentication.Cookies.CookieAuthenticationHandler:Information: AuthenticationScheme: AzureADB2CCookie 已登录。Microsoft.AspNetCore.Hosting.Internal.WebHost:Information: Request completed in 56.201ms

然后,当我在浏览器中手动导航到 /Onboarding/Start 时,我得到

远程身份验证错误:关联失败。

Microsoft.AspNetCore.Hosting.Internal.WebHost:Information: Request starting HTTP/1.1 GET http://localhost:12345/Onboarding/start  
Microsoft.AspNetCore.Authentication.OpenIdConnect.OpenIdConnectHandler:Warning: .AspNetCore.Correlation. state property not found.
Microsoft.AspNetCore.Authentication.OpenIdConnect.OpenIdConnectHandler:Information: Error from …
Run Code Online (Sandbox Code Playgroud)

c# azure-ad-b2c asp.net-core-2.1

5
推荐指数
1
解决办法
3601
查看次数

Azure AD B2C 注册 HTML 自动对焦

我正在为我们的注册/登录等用户流程使用自定义策略。在 Chrome 和 Edge 中导航到注册表单时,该表单会在屏幕上向下滚动显示。我相信这是因为最低的输入字段(复选框)有一个 autofocus属性,即:

<input name="xxx" id="xxx" autofocus="" type="checkbox" value="True" />

我可以验证最低输入(复选框)是否具有焦点,因为当我按下空格键时,它会切换。

页面中的 Microsoft javascript 似乎正在动态设置此自动对焦属性。通过 javascript 搜索看起来每个输入都有一个AUTOFOCUS=True属性:

{ "USER_INPUT_TYPE": "CheckboxMultiSelect", "IS_TEXT": false, "IS_EMAIL": false, ... "OPTIONS": [{ "DISP": "I agree.", "VAL": "True", "PRESEL": false, -->> "AUTOFOCUS": true <<-- } ] }

有没有办法改变这种自动对焦行为?目前这很烦人,因为这意味着 Chrome 用户在页面加载时会看到表单的下半部分。

azure-ad-b2c

5
推荐指数
1
解决办法
409
查看次数

msal.js - 注销而不重定向

是否可以在不重定向的情况下注销?

每次我注册用户时,我都需要验证用户是否在外部数据库中(带有邀请令牌的数据库)。我是在注册完成后才做的。当我发现用户不应该被允许登录时,我需要调用logout以清除登录弹出窗口中的 cookie/存储(如果我在再次打开 singin 弹出窗口后不这样做,azure 会尝试自动登录用户并且不允许,例如,重新注册)。在我的情况下,页面的刷新是不必要的,因为它是一个注册过程,我已经在登录页面进行刷新。

azure-ad-b2c azure-ad-msal msal.js

5
推荐指数
1
解决办法
7099
查看次数

API 管理身份提供者的权限字段中的内容

问题

我正在使用 Azure API 管理服务构建 API。我已经创建了一个 Azure AD B2C 租户,我可以通过它来授权对上述 API 的调用。

我能够成功设置租户;但是,我在尝试添加 Azure Active Directory B2C 类型的身份提供程序时遇到了问题。

我正在关注 2017 年的演练:https : //docs.microsoft.com/en-us/azure/api-management/api-management-howto-aad-b2c

问题是在 Azure 文档中未涵盖的实际创建向导中发生了一些更改。还有一个额外的字段是必需的:权威;那里有什么?

我试过的

到目前为止,我已经在网上搜索过,我唯一能找到的是 ASP.NET 应用程序引用以下架构的权限:

https://login.microsoftonline.com/tfp/ {tenant}/B2C_1_{signup_policy}

我尝试了此操作(填写我的租户和注册策略独有的缺失值),但收到错误消息:“一个或多个字段包含不正确的值:Azure Active Directory B2C 权限无效。”

有人可以告诉我应该去那里做什么,或者至少指出我更新的 Azure 文档的方向吗?同样,上面的链接文档是 2017 年的,没有提到授权字段。

azure azure-active-directory azure-api-management azure-ad-b2c

5
推荐指数
1
解决办法
556
查看次数

如何使用 Owin 在 MVC 应用程序上获取 Azure B2C 访问令牌

我的最新项目让我制作了一个 MVC 应用程序。该应用程序的基本要求是允许用户使用 Azure ADD B2C 登录并允许用户操作 Azure 应用服务数据库上的数据。按照此处的这篇文章,我已成功将用户登录到 B2C。但是,从登录应用服务开始,我无法进入应用程序的第二部分。我知道我需要从 B2C 获取访问令牌才能传递给应用程序服务进行验证。我的问题是我只能获得一个 ID 令牌,该应用服务应该向我发送一个 401。我的 OWIN 启动类包含以下内容,就像文章一样:

public class Startup
{
    // App config settings
    private static string clientId = ConfigurationManager.AppSettings["ida:ClientId"];
    private static string aadInstance = ConfigurationManager.AppSettings["ida:AadInstance"];
    private static string tenant = ConfigurationManager.AppSettings["ida:Tenant"];
    private static string redirectUri = ConfigurationManager.AppSettings["ida:RedirectUri"];

    // B2C policy identifiers
    public static string SignUpPolicyId = ConfigurationManager.AppSettings["ida:SignUpPolicyId"];
    public static string SignInPolicyId = ConfigurationManager.AppSettings["ida:SignInPolicyId"];
    public static string ProfilePolicyId = ConfigurationManager.AppSettings["ida:UserProfilePolicyId"];

    public void Configuration(IAppBuilder app)
    {
        ConfigureAuth(app);
    } …
Run Code Online (Sandbox Code Playgroud)

authentication cookies asp.net-mvc azure azure-ad-b2c

5
推荐指数
0
解决办法
928
查看次数

AADB2C90083:请求缺少必需参数:grant_type

我正在尝试使用以下 URL 中提到的自定义策略在 Azure Active Directory B2C 中配置 ROPC 流。

https://docs.microsoft.com/en-us/azure/active-directory-b2c/ropc-custom

但是在测试 ROPC 策略时出现以下错误。{ "error": "invalid_request", "error_description": "AADB2C90083: 请求缺少必需参数:grant_type。\r\n相关 ID:b4153dfe-4296-4b68-850f-ee30ac4d86b0\r\n时间戳:2019- 11:53:23Z\r\n" }

azure azure-active-directory azure-ad-b2c

5
推荐指数
1
解决办法
3128
查看次数

如何使用 B2C 和 Blazor 获取 JWT 不记名令牌

我已经使用 Visual Studio 模板创建了一个新的 Blazor 应用程序,并在项目创建期间使用向导添加了 B2C。

所有这些都适用于身份验证。我可以使用我最喜欢的身份提供者登录并接收 id_token。我不知道在哪里可以获得 id_token,但我可以在我的用户身份中看到声明。

我需要帮助的是如何获取声明中的信息以获取访问令牌。我需要这个令牌来调用我的端点。

这似乎应该是简单而常见的事情,但我似乎找不到任何好的例子。

在普通的 MVC 应用程序中,我可以通过 ConfidentialClientApplicationBuilder.AcquireTokenByAuthorizationCode 获得它,但这在 Blazor 中不起作用(除非我做错了什么)。

我试过这个:https : //docs.microsoft.com/en-us/azure/active-directory-b2c/active-directory-b2c-access-tokens

我认为它会起作用。如何在我的 blazor 应用程序中获取“代码”(id_token)?这是在幕后解码的内容,我所能找到的只是解码“代码”所产生的声明。

我已经使用 azure 的“运行用户流程”来访问示例 id_token("code") 并将其粘贴到我的项目中并在上面的链接中进行调用,它似乎有效。我遇到了权限问题,但这至少是一个成功的调用。

也许如果我可以访问 id_token,我就可以从那里开始工作?

c# access-token azure-ad-b2c

5
推荐指数
1
解决办法
976
查看次数

如何删除 Azure DevOps 企业应用程序?

我有一个要删除的 Azure AD B2C 租户(pita 过程!)。所以我必须先手动删除所有注册的应用程序。不知何故,我在那里注册了一个名为“Azure DevOps”的企业应用程序。这是不可删除的。如何删除它?

在此处输入图片说明

azure-ad-b2c

5
推荐指数
1
解决办法
1430
查看次数

Azure AD B2C - 如何将新用户声明传播到访问令牌

我正在使用 Azure AD B2C 对我的移动应用程序的用户进行身份验证。我在设备上使用 Microsoft.Identity.ClientAcquireTokenSilentAcquireTokenInteractive管理用户身份验证状态。一切都很好。

当用户完成身份验证后,我的服务器将检查他们的 ID 以查看他们是否已在我的用户数据库中注册,如果没有,将询问他们的详细信息并保存。在这一点上,我有一个用户的本地唯一 ID,我想将其添加到他们的访问令牌中,以便其他服务可以使用它进行授权。所以我调用了 AD B2C 图 API 来设置一个 UserId 自定义属性。我已向 Azure AD B2C 注册了自定义属性,并且我的用户流都在应用程序声明下选择了 UserId,以便将其添加到 JWT。我基本上遵循此处描述的选项 1:将声明添加到令牌 Azure B2C 中。配置似乎是正确的,一切正常......

... 除了一件事。UserId 声明仅在用户注销并再次登录后出现在访问令牌中。

所以在用户通过身份验证后,我将他注册到我的数据库中,调用 Graph API 来设置他的 UserId 声明。此后,每当我在设备上获取令牌时,即使我使用WithForceRefresh(true),我也会得到一个没有 UserId 声明的令牌。如果我调用 Graph API,我可以看到该声明存在于用户的个人资料中,但它没有进入令牌。一旦用户注销并再次登录,他就会得到一个包含声明的令牌。

为了解决这个问题,我需要强制用户在注册后再次登录,这很愚蠢。或者,如果令牌中不存在缺失的信息,我需要调用 Graph API 并填写缺失的信息,这也是次优的。

我在这里缺少什么?强制 AD 使用新声明刷新用户的访问令牌而不需要用户再次登录的正确方法是什么?

更新 为了简单起见,我使用了 UserId 的示例,但正如 Jas 在下面指出的那样,我可以在注册时使用 REST API 声明交换设置类似的静态字段。所以为了让我的问题更完整,让我补充一点,我也希望能够在初始注册后更新声明。例如,一个用户可能在初始注册时被分配一个角色,然后被转移到一个不同的角色。我想更新用户的声明,以便我可以根据用户访问令牌中更新的声明对用户执行授权。但是,如果我不能保证这些声明始终是最新的,那么我将需要回退到我自己的数据库/服务,这将有效地使 AD B2C 成为没有授权实用程序的身份验证提供程序。

azure-ad-b2c

5
推荐指数
1
解决办法
1483
查看次数

该应用程序无法访问 Xamarin.Forms 中的 iOS 钥匙串,但可以在 Android 中使用

您好,我正在学习使用 MSAL,但遇到了有线问题。我完全遵循了教程,并且正在使用示例代码。但我在App.xaml.cs中构建客户端时仍然遇到此异常:

microsoft.identity.client.msalclientException:应用程序无法访问应用程序发布者的 ios 钥匙串(团队 ID 为空)。这是为了在同一发布者的应用程序之间启用单点登录所必需的。这是ios配置问题。有关启用钥匙串访问的更多详细信息,请参阅 https://aka.ms/msal-net-enable-keychain-access 。

AuthenticationClient = PublicClientApplicationBuilder.Create(Constants.ClientId)
                .WithIosKeychainSecurityGroup(Constants.IosKeychainSecurityGroups)
                .WithB2CAuthority(Constants.AuthoritySignin)
                .WithRedirectUri($"msal{Constants.ClientId}://auth")
                .Build();
Run Code Online (Sandbox Code Playgroud)

相关设置如下:

信息.plist:

<key>CFBundleURLTypes</key>
    <array>
        <dict>
            <key>CFBundleURLName</key>
            <string>ADB2C Auth</string>
            <key>CFBundleURLSchemes</key>
            <array>
                <string>msal....</string>
            </array>
            <key>CFBundleTypeRole</key>
            <string>None</string>
        </dict>
        <dict>
            <key>CFBundleURLName</key>
            <string>URL Type 1</string>
        </dict>
    </array>
Run Code Online (Sandbox Code Playgroud)

Contants.cs 中的 ioskeychain

 // set to a unique value for your app, such as your bundle identifier. Used on iOS to share keychain access.
        static readonly string iosKeychainSecurityGroup = "com.xamarin.adb2cauthorization";

Run Code Online (Sandbox Code Playgroud)

权利.plist:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC …
Run Code Online (Sandbox Code Playgroud)

xamarin.ios azure-active-directory xamarin.forms azure-ad-b2c azure-ad-msal

5
推荐指数
1
解决办法
4264
查看次数