1. クレームのマッピングのスクリプト

クレームのマッピングの例

Version:
日本語翻訳に関する免責事項

このページの翻訳はAIによって自動的に行われました。可能な限り正確な翻訳を心掛けていますが、原文と異なる表現や解釈が含まれる場合があります。正確で公式な情報については、必ず英語の原文をご参照ください。

ここに示されているのは、外部のログイン プロバイダーから提供された情報を読み取り、ログオンしたユーザーのプロファイルに保存するユーザー サインイン スクリプトの例です。

ユース ケース

外部ログイン プロバイダーは、ログオンしたユーザーに関する情報をクレームの形式で提供します。 提供されるクレームは、使用するログイン プロバイダーに大きく依存します。

この例は、ログイン プロバイダーとして Google を使用して開発されています。 Google は、givenname および surname という 2 つのクレームを提供します。 M.UserProfileエンティティ定義には、 FirstName および LastNameという 2 つのプロパティが含まれると仮定します。 このスクリプトは、givenname および surname クレームの値をこれらのプロパティにマッピングします。

[!注] 「FirstName」および「LastName」プロパティは、最初から用意されているわけではありません。 スキーマエディターを使用して追加されています。

スクリプト

using System.Linq;
using System.Security.Claims;

if (Context.ExternalUserInfo?.Claims == null) return;

var firstName = Context.ExternalUserInfo.Claims.FirstOrDefault(c => c.Type == ClaimTypes.GivenName)?.Value;
var lastName = Context.ExternalUserInfo.Claims.FirstOrDefault(c => c.Type == ClaimTypes.Surname)?.Value;

if (string.IsNullOrEmpty(firstName) && string.IsNullOrEmpty(lastName)) return; // No first or lastname claims found, nothing to do.

var userToUserProfile = await Context.User.GetRelationAsync<IParentToOneChildRelation>("UserToUserProfile");
if (!userToUserProfile.Child.HasValue) throw new InvalidOperationException("The logged on user has no user-profile.");

var profile = await MClient.Entities.GetAsync(userToUserProfile.Child.Value); 
if (profile == null) throw new InvalidOperationException("The logged on user has no user-profile.");

if (!string.IsNullOrEmpty(firstName))
{
    profile.SetPropertyValue("FirstName", firstName);
}

if (!string.IsNullOrEmpty(lastName))
{
    profile.SetPropertyValue("LastName", lastName);
}

await MClient.Entities.SaveAsync(profile);

スクリプトの説明

  1. スクリプトで使用するライブラリをインクルードします。
この記事を改善するための提案がある場合は、 お知らせください!