web-dev-qa-db-ja.com

Windows認証-GUIDには、32桁と4つのダッシュが含まれている必要があります(xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx)

StackifyによるRetraceを使用してアプリケーションを監視し始めたところ、次のような何千ものエラーが発生しました。

System.FormatException: Guid should contain 32 digits with 4 dashes (xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx).
at System.Guid.TryParseGuidWithNoStyle
at System.Guid.TryParseGuid
at System.Guid..ctor
at System.DirectoryServices.AccountManagement.ADStoreCtx.IdentityClaimToFilter

これらのエラーは1日に何千回も発生しており、その理由を理解することはできません。まず、私のアプリケーションは次のように機能します。

MVCフロントエンド-Windows認証を使用(RestSharpを使用してバックエンドを呼び出す)

RestSharpNTLM認証から渡されたWindows認証を使用するWebAPIバックエンド。

RestSharpラッパー

    public object WebRequest<T>(string controller, Dictionary<string, string> parameters, Method apiMethod, string action)
    {
        RestClient client = new RestClient(Url + controller + "/");
        client.Authenticator = new NtlmAuthenticator();
        RestRequest request = new RestRequest(action, apiMethod);

        if (parameters != null && parameters.Count > 0)
        {
            foreach (var parameter in parameters)
            {
                request.AddParameter(parameter.Key, parameter.Value);
            }
        }

        object result = JsonToObject<T>(client.Execute(request).Content);

        return result;
    }

ヘルパーメソッド

@helper Username()
{
PrincipalContext ctx = new PrincipalContext(ContextType.Domain);

 var username = System.Web.HttpContext.Current.User.Identity.Name.Replace(@"DOMAIN\", "");

@username
}

@helper UserFullName()
{
    using (var context = new PrincipalContext(ContextType.Domain))
    {
        var principal = UserPrincipal.FindByIdentity(context, User.Identity.Name);
        if (principal != null)
        {
            var fullName = string.Format("{0}", principal.DisplayName);
            @fullName
        }
    }
}

このエラーが発生している可能性がある場所、またはエラーを絞り込むために何ができるかについての提案はありますか? Stackifyでわかることから、すべてのページで発生しているようです。

6
Harambe

FindByIdentityのオーバーロードがあり、identityValueが実際に何であるかを指定できます。

Try UserPrincipal.FindByIdentity(context, IdentityType.SamAccountName, User.Identity.Name);

GUIDはこの呼び出しの有効なオプションであるため、非特定のオーバーロードを使用すると問題が発生するようで、おそらく値が何であるかをスニッフィングしようとします。

1
Alex K.