我想以编程方式设置注册策略的用户属性。我看到一年多前提出的上一个问题(将参数传递给注册策略)在当时是不可能的。这事有进一步更新吗?
这可以通过AuthenticationProperties.Dictionary属性实现吗?像这样的东西吗?
HttpContext.GetOwinContext().Set("Policy", Startup.SignUpPolicyId);
var authenticationProperties = new AuthenticationProperties();
authenticationProperties.Dictionary.Add("myattribute", "myvalue");
HttpContext.GetOwinContext().Authentication.Challenge(authenticationProperties);
Run Code Online (Sandbox Code Playgroud) email我正在尝试删除从 Azure AD B2C 获得的声明中的括号。
用户登录后,我解码用户的令牌并从中获取电子邮件。但我收到的电子邮件中有括号。该电子邮件看起来像这样["email@email.com"],当我将其保存到数据库时,它变得很难看。
是否有一些设置可以从电子邮件声明中删除括号?
JObject ParseIdToken(string idToken)
{
// Get the piece with actual user info
idToken = idToken.Split('.')[1];
idToken = Base64UrlDecode(idToken);
return JObject.Parse(idToken);
}
private string Base64UrlDecode(string s)
{
s = s.Replace('-', '+').Replace('_', '/');
s = s.PadRight(s.Length + (4 - s.Length % 4) % 4, '=');
var byteArray = Convert.FromBase64String(s);
var decoded = Encoding.UTF8.GetString(byteArray, 0, byteArray.Count());
return decoded;
}
public void CacheUser(AuthenticationResult ar)
{
JObject user = ParseIdToken(ar.IdToken);
var cache = new CachedUsers …Run Code Online (Sandbox Code Playgroud) 我有一个 Azure AD B2C 租户和应用程序,其中启用了使用 Facebook、其他 AAD 和本地帐户的身份验证。B2C 中的用户有一些自定义字段,这些字段在注册时填充并用作 JWT 令牌中的声明。
但我无法在 Azure 门户中的任何位置看到该字段值,也无法使用 Microsoft Graph API。
它们存储在哪里以及如何访问它们?
我无法弄清楚它的目的customState以及是否/如何利用它来将数据传递到返回网址。具体来说,我希望在登录后将用户路由回其原始位置。我想我可以将原始 url 传递给参数customState,并在 return url 中将其返回给我POST,但它似乎已被编码或可能被替换为不同的值。
这是我想要实现的目标:
/page/protected需要身份验证。passport.authenticate进而重定向用户进行登录。/auth/oidc/return。/page/protected。尝试使用本地帐户的自定义 IEF 策略登录时出现此错误。我已经验证我的 IEFProxy 设置为访问 IEFApp 并获得同意,并且他们的回复 URL 是正确的。缺少什么?
我想在用户访问 B2C 的忘记密码页面时添加自定义消息。当他们输入他们的电子邮件地址并且没有找到他们的“电话号码”时,它应该只是在“继续/取消”按钮下显示一条错误消息,上面写着“未注册,联系支持”(也可以在电子邮件文本框上)如果在它下面做太多事情,就会出现正常的错误消息)
我有用户旅程和编排步骤来检测电话号码是否存在的先决条件。但不确定如何执行此自定义错误消息。以下旅程的顺序 2 需要该步骤来显示该错误消息并完成(不运行进一步的步骤)
<UserJourney Id="PasswordReset">
<OrchestrationSteps>
<OrchestrationStep Order="1" Type="ClaimsExchange">
<ClaimsExchanges>
<ClaimsExchange Id="PasswordResetUsingEmailAddress" TechnicalProfileReferenceId="LocalAccountDiscoveryUsingEmailAddress" />
</ClaimsExchanges>
</OrchestrationStep>
<OrchestrationStep Order="2" Type="ClaimsExchange">
<Preconditions>
<Precondition Type="ClaimsExist" ExecuteActionsIf="true">
<Value>phonenumber</Value>
<Action>SkipThisOrchestrationStep</Action>
</Precondition>
</Preconditions>
<ClaimsExchanges>
<ClaimsExchange Id="PasswordResetUsingEmailAddressExchange" TechnicalProfileReferenceId="LocalAccountDiscoveryUsingEmailAddressOTP" />
</ClaimsExchanges>
</OrchestrationStep>
..........
Run Code Online (Sandbox Code Playgroud)
我认为我们可以通过使用 UserMessageIfClaimsPrincipalDoesNotExist 和 RaiseErrorIfClaimsPrincipalDoesNotExist 之类的东西来实现,就像在自定义配置文件中发现的那样。但只是寻找一个捆绑的例子来把这些碎片放在一起。
带有 Azure AD B2C 的 ASP.NET Core 2.2 应用程序(使用 URL Endpoint v2.0):
我将我的核心应用程序配置如下 AppSettings.js:
"AzureAdB2C": {
"Instance": "https://login.microsoftonline.com/tfp",
"ClientId": "{ClientIdGuid}",
"Domain": "{Subdomain}.onmicrosoft.com",
"SignUpSignInPolicyId": "B2C_1_SignUpSignInDevelopment"
}
Run Code Online (Sandbox Code Playgroud)
启动:
public void ConfigureServices(IServiceCollection services)
{
...
services.AddAuthentication(AzureADB2CDefaults.JwtBearerAuthenticationScheme)
.AddAzureADB2CBearer(o => Configuration.Bind("AzureAdB2C", o));
}
public void Configure(IApplicationBuilder app, IHostingEnvironment env)
{
...
app.UseAuthentication();
app.UseMvc(o=>{o.MapRoute(name:"d",template:"{controller}/{action=Index}/{id?}");});
}
Run Code Online (Sandbox Code Playgroud)
我的 Angular 7 客户端使用具有以下设置的 MSAL:
MsalModule.forRoot({
clientID: environment.azureB2CClientID,
authority: "https://" + environment.azureTenantIDSubdomain + ".b2clogin.com/tfp/" +
environment.azureTenantIDSubdomain + ".onmicrosoft.com/" +
environment.azureSignUpSignInPolicyId + "/v2.0",
redirectUri: environment.schemeAndAuthority + "/home",
validateAuthority: false,
cacheLocation : "localStorage", …Run Code Online (Sandbox Code Playgroud) openid-connect azure-ad-b2c azure-ad-msal asp.net-core-webapi angular
我在理解 MSAL 身份验证和授权时遇到了一些麻烦。我有一个用 React 开发的单页应用程序。我已通过在 Azure AD 上注册 Web 应用程序来设置 MSAL Azure SSO 身份验证。现在,我有一个在单独的应用程序服务上运行的 Web API(在 .Net Core 中)。如何将 React 应用程序的身份验证集成到 Web API?
想到几个问题:
请分享您的想法。如果我能解释得更好,请告诉我。
我在我的 Xamarin 表单应用程序中使用 appcenter Auth 和 Data,但微软正在关闭这些服务,所以我现在需要自己做。Atm 这两个允许我使用 ADB2C 验证我的用户,然后授予他们访问 Cosmos 数据库中拥有和共享的内容的权限。
我有什么 atm:我可以通过 MSAL 登录到我的 AD B2C。我可以使用 Microsoft.Azure.DocumentDB.Core 访问我的数据库。
我需要的是:我需要能够生成资源令牌并配置数据库,以便只有用户可以访问他们的文档。(只发现过时且描述不佳的教程)
或者作为替代方案:如何创建只有通过 msal 登录的用户才能调用的 Azure 函数?然后我需要 Azure 函数中的用户 ID 来检查数据库。(所有教程都处理 api 调用的用户验证,从应用程序调用时这是不可能的)
azure xamarin azure-ad-b2c azure-functions visual-studio-app-center
我们有这份文档解释了如何使用自定义策略设置让我登录 (KMSI):https ://docs.microsoft.com/en-us/azure/active-directory-b2c/custom-policy-keep -我已登录
好的,太好了,所以我们现在知道如何使用(令人讨厌的复杂)XML 策略文件为复选框设置一些 UI。但这实际上是在做什么? 哪里有这方面的资料?
我的理解是,对于隐式授予,存储刷新令牌是不可能的,因此保留会话 cookie 并使用它通过 i-frame 获取新会话prompt=none是一个 HACK,能够保持会话 cookie 更新和最新。
这是前 MS(现为 Auth0)身份专家 Vittorio 的一篇文章:https ://auth0.com/blog/oauth2-implicit-grant-and-spa/
他提到了Refresh Token Rotation 的“ Renewing Access Tokens ” 。这被描述为:
“一种使刷新令牌无效并在用于刷新访问令牌时发出新令牌的功能”
这似乎是通过会话 cookie 和 i-frame“hack”(与隐式授权一起使用)来完成的,它返回一个新的授权代码,(大概)可以用来获取新的访问令牌。
当我们现在拥有 PKCE 时,为什么需要这样做? 显然,即使使用 PKCE,在浏览器中存储长期存在的刷新令牌仍然很糟糕。我发现未记录的信息表明SPA 最大生命周期的 B2C 刷新令牌为 24 小时(不是 90 天,并且不可配置)。 …