我按照此处的文档返回阻止响应https://learn.microsoft.com/en-us/azure/active-directory-b2c/add-api-connector?pivots=b2c-user-flow#example-of -a-blocking-response从 api 连接器到 azure ad b2c,但是即使在构建了文档中所示的正确响应之后,我仍然无法显示 b2c 用户流的阻止页面。
请注意,此连接器在登录时被调用。
我已经验证 api 的响应似乎是正确的,如下所示
{
"version": "1.0.0",
"action": "ShowBlockPage",
"userMessage": "You must have a local account registered for Contoso."
}
Run Code Online (Sandbox Code Playgroud)
有了这个,我们希望看到如下所示的阻塞页面(来自文档的屏幕截图),但 b2c 不会显示它并直接进入连接的应用程序。
我错过了什么?任何指示将不胜感激。TIA。
这是我的 api 连接器的代码
public static async Task<IActionResult> Run(HttpRequest req, ILogger log)
{
log.LogInformation("C# HTTP trigger function processed a request.");
// Get the request body
string requestBody = await new StreamReader(req.Body).ReadToEndAsync();
dynamic data = JsonConvert.DeserializeObject(requestBody);
// If input data is null, show block page
if (data …Run Code Online (Sandbox Code Playgroud) 我们正在考虑从 B2C 应用程序的内置用户流程开始。我们希望受益于注册用户的标准流程、忘记密码的工作流程、MFA 等......
然而,由于我们平台的业务需求可能(并且将会)随着时间的推移而变化,标准用户流可能不够,我们可能需要随着时间的推移切换到自定义策略。
因此,我们想知道是否可以从当时标准配置的用户流迁移(导出/导入?)到基于 XML 的自定义策略?
我正在尝试 ad-b2c 和男孩,即使第一步也变得非常令人沮丧。无论如何,这是我的问题:
我想使用Azure AD B2C,但使用它有一些困难。我遇到的一个问题是验证令牌的签名。首先,我想使用jwt.io“手动”验证令牌。
根据Microsoft Docs的要求,验证签名应如下所示:
您的应用程序可以使用JWT标头中的kid声明在JSON文档中选择用于签署特定令牌的公钥。然后,它可以使用正确的公钥和指示的算法执行签名验证。
我的理解:从头中获取kid值,在jwks_uri位置下的元数据中查找键,(假设)使用值“ n”来验证签名。
但是Jwt.io,jsonwebtoken.io和jose-jwt都说,siganture 是无效的。
我想念什么?
我在此处遵循了"入门"工作流程:https: //docs.microsoft.com/azure/active-directory-b2c/active-directory-b2c-get-started-custom
我从头开始跟踪它,两次,并且尝试使用登录和注册自定义策略登录时都会出现"我的密码不正确"的提示.我该如何正确认证?
工作的事情:
使用Application Insights我可以看到以下错误.(适用一些卫生设施)
"ValidationRequest":{
"ContentType":"Unspecified",
"Created":"2017-10-06T17:19:34.3995426Z",
"Key":"ValidationRequest",
"Persistent":true,
"Value":"client_id=55555555-5555-5555-5555-555555555555&resource=cccccccc-cccc-cccc-cccc-cccccccccccc&username=MYUSERNAME&password=PASSWORDIENTEREDONSCREEN&grant_type=password&scope=openid&nca=1;1;login-NonInteractive;False"
},
"ValidationResponse":{
"ContentType":"Json",
"Created":"2017-10-06T17:19:34.3995426Z",
"Key":"ValidationResponse",
"Persistent":true,
"Value":"{\"error\":\"invalid_client\",\"error_description\":\"AADSTS70002: The request body must contain the following parameter: 'client_secret or client_assertion'.\\r\\nTrace ID: 55555555-cccc-cccc-cccc-555555555555\\r\\nCorrelation ID: 77777777-7777-7777-7777-777777777777\\r\\nTimestamp: 2017-10-06 17:19:33Z\",\"error_codes\":[70002],\"timestamp\":\"2017-10-06 17:19:33Z\",\"trace_id\":\"55555555-cccc-cccc-cccc-555555555555\",\"correlation_id\":\"77777777-7777-7777-7777-777777777777\"};1;login-NonInteractive;False"
},
Run Code Online (Sandbox Code Playgroud)
重要的一点似乎是:
"AADSTS70002:请求正文必须包含以下参数:'client_secret或client_assertion"
后来它说:
"抛出了类型'Web.TPEngine.Providers.BadArgumentRetryNeededException'的异常."
我仔细检查了一些事情:
任何帮助深表感谢.谢谢.
有人知道为什么当我邀请用户访问我的Azure AD B2C时,他们中的一些人在点击邀请电子邮件后会看到不同的网页吗?例如,用户将要求@ gmail.com创建Microsoft帐户,但如果他的电子邮件以@ mvrht.net结尾,则此页面的布局将有所不同.
我试图在网上搜索任何东西,但没有找到任何东西.是否有某种"魔法?算法决定这一点?
我有2个声明,我想存储在目录中供我的应用程序使用.这些不可供用户编辑,但可供应用程序从令牌中读取.
BuiltIn策略能够检索声明,但是,使用自定义策略检索这些声明时,我没有取得任何成功.
阅读文章"在自定义配置文件编辑策略中创建和使用自定义属性"的后续步骤,需要将声明添加到RP和TechnicalProfile以从目录中读取.因此,我更新了RP以及从目录中读取的TP
<TechnicalProfile Id="AAD-UserReadUsingAlternativeSecurityId">
<TechnicalProfile Id="AAD-UserReadUsingObjectId">
<TechnicalProfile Id="SelfAsserted-LocalAccountSignin-Email">
<TechnicalProfile Id="AAD-UserReadUsingEmailAddress">
Run Code Online (Sandbox Code Playgroud)
无法弄清楚可能缺少什么来检索2个扩展声明.
如何查询Azure AD Graph的SignInName?即,我想获取用户的登录名并在Azure AD图中找到用户对象。
我会假设我应该使用$filter,对吧?
我试过了:
https://graph.windows.net/myB2Ctenant.onmicrosoft.com/users?api-version=1.6&$filter=signInNames eq spottedmahn
Run Code Online (Sandbox Code Playgroud)
我得到:
二进制运算符“等于”的操作数不是单个值。二进制运算符要求两个操作数均为单个值。
好的,所以也许我支持使用any运算符,所以我尝试了:
https://graph.windows.net/myB2Ctenant.onmicrosoft.com/users?api-version=1.6&$filter=signInNames/any(c:c eq 'spottedmahn')
Run Code Online (Sandbox Code Playgroud)
检测到类型不兼容的二进制运算符。找到运算符类型“等于”的操作数类型“ Microsoft.DirectoryServices.SignlnName”和“ Edm.String”。
c:c我以为是lambda,然后尝试了以下操作:
https://graph.windows.net/myB2Ctenant.onmicrosoft.com/users?api-version=1.6&$filter=signInNames/any(c:c.value eq 'spottedmahn')
Run Code Online (Sandbox Code Playgroud)
强制转换中的子类型“ c.value”不是实体类型。只能对实体类型执行转换。
参考:用户实体
我正在尝试自定义Azure AD B2C统一登录/注册页面上的页面UI。
我能够创建模板,并使用正确的CORS设置将所有资产(即html页面,图像和CSS)上传到我的Azure Blob存储容器。
但是,当我拉出页面时,它看起来绝对可怕!它似乎不支持Bootstrap。我读到某处禁止使用JavaScript。是这个原因吗?
一旦我上传我的自定义HTML页面,Azure的AD B2C似乎被剥离了很多必要的设计元素为我定制如id和style我的body标签-见下图:
<!-- Omitted for brevity -->
<body id="my-login-class" style="url: ('https://myazurestorage.blob.core.windows.net/my-container/my-bg-image.jpg')">
<div id="some-important-id" class="my-important-class">
<div class="col-xs-8">
<div>Some important message</div>
<div>
<div class="col-xs-4">
<div id="api">
</div>
</div>
</div>
</body>
Run Code Online (Sandbox Code Playgroud)
呈现自定义页面后,当我检查页面源代码时,我发现所有类和ID以及Bootstrap引用(例如css和)都被删除js。
我说对了吗?没有引导程序,这意味着Azure AD B2C仅支持最基本的自定义类型?
我有两个本机Android应用程序,它们使用相同的Azure AD B2C应用程序。
我已经在Android清单中使用以下代码创建了第一个应用程序
<activity android:name="microsoft.identity.client.BrowserTabActivity" android:screenOrientation="portrait">
<intent-filter>
<action android:name="android.intent.action.VIEW" />
<category android:name="android.intent.category.DEFAULT" />
<category android:name="android.intent.category.BROWSABLE" />
<data android:scheme="msauth-74ffd02e-dc15-4e4b-bec8-966579b851db" android:host="com.myapp.firstadapplication" />
</intent-filter>
</activity>
Run Code Online (Sandbox Code Playgroud)
如果我的理解是正确的,那么这段代码将在登录成功后唯一地标识应用程序。特别是android方案。
在Azure AD门户中,我在重定向uri中配置了相同的方案

msauth-74ffd02e-dc15-4e4b-bec8-966579b851db://com.myapp.firstadapplication
Run Code Online (Sandbox Code Playgroud)
我的疑问是,
由于我在两个本机移动应用程序中使用相同的Azure AD应用程序,是否可以在唯一标识第二个应用程序的Azure门户中添加另一个重定向uri?就像我在下面写的一样。
首次申请-
msauth-74ffd02e-dc15-4e4b-bec8-966579b851db://com.myapp.firstadapplication
Run Code Online (Sandbox Code Playgroud)
二次申请-
msauth-64ffd02e-ec15-3e4b-bec8-866579b851db://com.myapp.secondadapplication
Run Code Online (Sandbox Code Playgroud)