小编Ale*_*lex的帖子

IDX10803:无法创建从以下位置获取配置:“https://login.microsoftonline.com/{Tenant-ID}/.well-known/openid-configuration”

在过去的 5 年里,我一直在使用 Azure IoT 远程监控解决方案并使用 Azure AD 身份验证来保护应用程序和 API,从上周六开始,我在登录时收到以下错误(黄色屏幕):

IDX10803:无法创建从“https://login.microsoftonline.com/{Tenant-ID}/.well-known/openid-configuration”获取配置。

这是我的身份验证相关的启动代码:

public void ConfigureAuth(IAppBuilder app, IConfigurationProvider configProvider)
    {
        string aadClientId = configProvider.GetConfigurationSettingValue("ida.AADClientId");
        string aadInstance = configProvider.GetConfigurationSettingValue("ida.AADInstance");
        string aadTenant = configProvider.GetConfigurationSettingValue("ida.AADTenant");
        string authority = string.Format(CultureInfo.InvariantCulture, aadInstance, aadTenant);

        app.SetDefaultSignInAsAuthenticationType(CookieAuthenticationDefaults.AuthenticationType);

        app.UseCookieAuthentication(new CookieAuthenticationOptions());


        app.UseWindowsAzureActiveDirectoryBearerAuthentication(
            new WindowsAzureActiveDirectoryBearerAuthenticationOptions
            {
                Tenant = ConfigurationManager.AppSettings["ida:Tenant"],
                TokenValidationParameters = new TokenValidationParameters { SaveSigninToken = true, ValidAudience = ConfigurationManager.AppSettings["ida:Audience"] }
            });


        app.UseOpenIdConnectAuthentication(
            new OpenIdConnectAuthenticationOptions
            {
                ClientId = aadClientId,
                Authority = authority,
                TokenValidationParameters = new TokenValidationParameters()
                {
                    ValidateIssuer = false
                },
                Notifications …
Run Code Online (Sandbox Code Playgroud)

azure azure-active-directory openid-connect

6
推荐指数
1
解决办法
4624
查看次数

如何使用自定义策略检查 AD B2C 中是否存在用户?

我有一个注册流程,它工作正常并且是多步骤的:

  1. 联系方式
  2. 确认
  3. 密码

现在的流程是,完成所有步骤后,将创建一个新用户,如果用户名已经存在,那么在最后一步中我会收到一条错误消息,表明该用户已经存在。现在我需要改变这个流程。输入联系方式(电子邮件)后,我想检查该用户是否存在。如果它存在,那么我需要显示在第一步本身的最后一步中显示的错误消息,并阻止旅程移动到下一步。

为了实现这一目标,我所做的是:

创建了一个 TP,使用电子邮件读取用户详细信息,并将其作为第一步的验证技术配置文件:

<TechnicalProfile Id="AAD-CheckUserExist">
                    <Metadata>
                        <Item Key="Operation">Read</Item>                        
                        <Item Key="RaiseErrorIfClaimsPrincipalAlreadyExists">true</Item>
                    </Metadata>
                    <IncludeInSso>false</IncludeInSso>
                    <InputClaims>                       
                        <InputClaim ClaimTypeReferenceId="email" PartnerClaimType="signInNames.emailAddress" />                        
                    </InputClaims>
                    <OutputClaims>
                        <!-- Required claims -->
                        <OutputClaim ClaimTypeReferenceId="objectId" />
                        <OutputClaim ClaimTypeReferenceId="authenticationSource" DefaultValue="localAccountAuthentication" />
                        <!-- Optional claims -->
                        <OutputClaim ClaimTypeReferenceId="userPrincipalName" />
                        <OutputClaim ClaimTypeReferenceId="displayName" />
                        <OutputClaim ClaimTypeReferenceId="accountEnabled" />
                        <OutputClaim ClaimTypeReferenceId="otherMails" />
                        <OutputClaim ClaimTypeReferenceId="signInNames.emailAddress"/>
                        <OutputClaim ClaimTypeReferenceId="signInNames.phoneNumber"/>
                        <OutputClaim ClaimTypeReferenceId="givenName" />
                        <OutputClaim ClaimTypeReferenceId="surname" />
                    </OutputClaims>
                    <IncludeTechnicalProfile ReferenceId="AAD-Common" />
                </TechnicalProfile>
Run Code Online (Sandbox Code Playgroud)

并添加<Item Key="RaiseErrorIfClaimsPrincipalAlreadyExists">true</Item><Metadata>.

以下是验证配置文件部分:

<TechnicalProfile Id="AAD-CheckUserExist">
                    <Metadata>
                        <Item Key="Operation">Read</Item>                        
                        <Item Key="RaiseErrorIfClaimsPrincipalAlreadyExists">true</Item> …
Run Code Online (Sandbox Code Playgroud)

xml azure-ad-b2c identity-experience-framework

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

只有“email”字段可以通过“id_token_hint”传递到 B2C 自定义策略

我按照这篇文章将电子邮件displayName作为id_token_hint传递给我的自定义策略。以下是我用来提取数据的技术简介:

      <TechnicalProfiles>
        <TechnicalProfile Id="IdTokenHint_ExtractClaims">
          <DisplayName> My ID Token Hint TechnicalProfile</DisplayName>
          <Protocol Name="None" />
          <CryptographicKeys>
            <Key Id="client_secret" StorageReferenceId="B2C_1A_ClientAssertionSigningKey" />
          </CryptographicKeys>  
          <OutputClaims>
            <!--Sample: Read the email cliam from the id_token_hint-->
            <OutputClaim ClaimTypeReferenceId="email" PartnerClaimType="newUserEmail"/>
            <OutputClaim ClaimTypeReferenceId="displayName" PartnerClaimType="displayName"/>
          </OutputClaims>
        </TechnicalProfile>
Run Code Online (Sandbox Code Playgroud)

问题是,我只能提取电子邮件值。未提取 displayName 声明类型我检查了jwt.ms中的id_token_hint值,其中存在电子邮件和 displayName 的值。我该如何解决这个问题?

azure-ad-b2c identity-experience-framework

4
推荐指数
1
解决办法
599
查看次数