标签: azure-ad-b2c

注册策略-通过代码设置用户属性

我想以编程方式设置注册策略的用户属性。我看到一年多前提出的上一个问题(将参数传递给注册策略)在当时是不可能的。这事有进一步更新吗?

这可以通过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)

azure azure-ad-b2c

3
推荐指数
1
解决办法
1879
查看次数

如何从 Azure AD B2C 删除电子邮件声明中的括号

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)

c# azure-ad-b2c

3
推荐指数
1
解决办法
352
查看次数

如何获取自定义 Azure AD B2C 用户配置文件属性的值

我有一个 Azure AD B2C 租户和应用程序,其中启用了使用 Facebook、其他 AAD 和本地帐户的身份验证。B2C 中的用户有一些自定义字段,这些字段在注册时填充并用作 JWT 令牌中的声明。

但我无法在 Azure 门户中的任何位置看到该字段值,也无法使用 Microsoft Graph API。

它们存储在哪里以及如何访问它们?

azure-ad-b2c microsoft-graph-api

3
推荐指数
1
解决办法
5442
查看次数

将 state/customState 与 Passport-azure-ad 结合使用

我无法弄清楚它的目的customState以及是否/如何利用它来将数据传递到返回网址。具体来说,我希望在登录后将用户路由回其原始位置。我想我可以将原始 url 传递给参数customState,并在 return url 中将其返回给我POST,但它似乎已被编码或可能被替换为不同的值。

这是我想要实现的目标:

  1. 匿名用户访问/page/protected需要身份验证。
  2. 代码调用passport.authenticate进而重定向用户进行登录。
  3. 用户登录并返回到预先配置的返回 URL,例如:/auth/oidc/return
  4. 代码处理从表单发布数据中提取信息。
  5. 用户被引导回/page/protected

node.js adal openid-connect azure-ad-b2c passport-azure-ad

3
推荐指数
1
解决办法
1653
查看次数

该应用程序尚未获得同意,无法用于本地帐户

尝试使用本地帐户的自定义 IEF 策略登录时出现此错误。我已经验证我的 IEFProxy 设置为访问 IEFApp 并获得同意,并且他们的回复 URL 是正确的。缺少什么?

azure-ad-b2c

3
推荐指数
1
解决办法
787
查看次数

如果在 Azure B2C 的忘记密码页面上,如何给出自定义错误消息?

我想在用户访问 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

3
推荐指数
1
解决办法
678
查看次数

从 Angular 7 (MSAL) 调用 ASP.NET Core 2.2 时颁发者无效

带有 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

3
推荐指数
1
解决办法
3793
查看次数

从 React 到 Web API 的 MSAL 身份验证和授权

我在理解 MSAL 身份验证和授权时遇到了一些麻烦。我有一个用 React 开发的单页应用程序。我已通过在 Azure AD 上注册 Web 应用程序来设置 MSAL Azure SSO 身份验证。现在,我有一个在单独的应用程序服务上运行的 Web API(在 .Net Core 中)。如何将 React 应用程序的身份验证集成到 Web API?

想到几个问题:

  • 我是否必须注册类似于我的 React 应用程序的 Web API 应用程序?
  • 我是否必须将身份验证令牌从我的 React 应用程序传递到 Web API?
  • 我是否必须仅在 Web API 端(使用 MSAL.Net)设置身份验证并且 React 应用程序将连接到它?

请分享您的想法。如果我能解释得更好,请告诉我。

reactjs azure-active-directory azure-ad-b2c azure-ad-msal

3
推荐指数
2
解决办法
6568
查看次数

如何结合 AD B2C(MSAL) 和 CosmosDB

我在我的 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

3
推荐指数
1
解决办法
708
查看次数

Azure B2C 中的 KMSI 实际上做什么?

我们有这份文档解释了如何使用自定义策略设置让我登录 (KMSI):https ://docs.microsoft.com/en-us/azure/active-directory-b2c/custom-policy-keep -我已登录

好的,太好了,所以我们现在知道如何使用(令人讨厌的复杂)XML 策略文件为复选框设置一些 UI。但这实际上是在做什么? 哪里有这方面的资料?

  • 它是否为客户端提供了一个新的 ID 令牌而无需重新验证?
  • 它是否提供了新的 auth_code?
  • 是否使用了隐藏的 i-frame?
  • 如何从客户端应用程序实际调用/完成刷新?(温泉)
  • 是否需要往返 B2C,它只是不要求用户提供凭据并将它们直接重定向回应用程序?或者应用程序是否能够使刷新请求完全 UI/UX 静默?如果是这样,如何?API在哪里?需要 MSAL.js 中的某些东西吗?
  • 为什么只有本地?如果 B2C 是“中间人”IDP,并且它发行的代币是它自己的(当然实际上不是来自社交帐户),那么为什么不能以这种方式为所有帐户类型(本地或社交)刷新代币?

我的理解是,对于隐式授予,存储刷新令牌是不可能的,因此保留会话 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 天,并且不可配置)。 …

azure-ad-b2c refresh-token pkce

3
推荐指数
1
解决办法
526
查看次数