VS 2015 の MVC 4 でAuth0-Mvc NuGet パッケージ (最新の 0.9.1) を使用しています。.NET 4.5.2 をターゲットにしています
@Html.AntiForgeryToken()部分ビューで を指定すると、
タイプ ' http://schemas.xmlsoap.org/ws/2005/05/identity/claims/nameidentifier ' または ' http://schemas.microsoft.com/accesscontrolservice/2010/07/claims/identityprovider ' のクレームは提供された ClaimsIdentity には存在しません。クレーム ベースの認証で偽造防止トークンのサポートを有効にするには、構成されたクレーム プロバイダーが生成する ClaimsIdentity インスタンスでこれらのクレームの両方を提供していることを確認してください。構成されたクレーム プロバイダーが代わりに別のクレームの種類を一意の識別子として使用する場合は、静的プロパティ AntiForgeryConfig.UniqueClaimTypeIdentifier を設定することによって構成できます。
同様の問題に対する他のアドバイスを使用して、次を含めるように変更Global.asax.csします。
protected void Application_Start()
{
AreaRegistration.RegisterAllAreas();
FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters);
RouteConfig.RegisterRoutes(RouteTable.Routes);
AntiForgeryConfig.UniqueClaimTypeIdentifier = ClaimTypes.NameIdentifier;
}
これはにつながります:
タイプ ' http://schemas.xmlsoap.org/ws/2005/05/identity/claims/nameidentifier ' のクレームは、提供された ClaimsIdentity に存在しませんでした。
この ClaimsIdentity と nameidentifier の問題を解決するためにコードを変更するにはどうすればよいですか?
MVC 4 サンプルで解決できないランタイム エラーが発生したこと、およびそのソースにコミュニティで見つかった変更が含まれていないことを確認しました。が@Html.AntiForgeryToken()あるので、解決策があることを願っています。
MyCallbackHandler.ashxは NuGet パッケージ 0.9.1 で提供されるものと同じです
public void ProcessRequest(HttpContext context)
{
var token = client.ExchangeAuthorizationCodePerAccessToken(context.Request.QueryString["code"], ConfigurationManager.AppSettings["auth0:CallbackUrl"]);
var profile = client.GetUserInfo(token.AccessToken);
var user = new Dictionary<string, string>
{
{ "name", profile.Name??"" },
{ "email", profile.Email??"" },
{ "family_name", profile.FamilyName??"" },
{ "given_name", profile.GivenName??"" },
{ "gender", profile.Gender??"" },
{ "nickname", profile.Nickname??"" },
{ "picture", profile.Picture??"" },
{ "user_id", profile.UserId??"" },
{ "id_token", token.IdToken }
};
ClaimsCookie.ClaimsCookieModule.Instance.CreateSessionSecurityToken(user);
var claimedUser = new User
{
AccessToken = user["id_token"],
UserID = user["user_id"],
Name = user["name"],
Email = user["email"],
NickName = user["nickname"],
ProfilePicUrl = user["picture"]
};
//go save to database.
//then redirect to another URL