web-dev-qa-db-ja.com

HttpContext.Current.User.Identity.Nameは、どのユーザー名が存在するかをどのように知るのですか?

これは必ずしも問題ではありません。私はそれがどのように機能するかについて興味があります。私には方法があります:

public static bool UserIsAuthenticated()
{
    bool isAuthed = false;
    try
    {
        if (HttpContext.Current.User.Identity.Name != null)
        {
            if (HttpContext.Current.User.Identity.Name.Length != 0)
            {
                FormsIdentity id = (FormsIdentity)HttpContext.Current.User.Identity;
                FormsAuthenticationTicket ticket = id.Ticket;
                isAuthed = true;
                string MyUserData = ticket.UserData;
            }
        }
    }
    catch { } // not authed
    return isAuthed;
}

HttpContext.Current.User.Identity.Nameは、ユーザーが存在しない場合はnullを返しますが、どのユーザー名が存在するか、または存在しないかをどのようにして知るのでしょうか?

34
Srb1313711

HttpContext.Current.User.Identity.Nameはnullを返します

これは、認証モードFormsまたはweb.configファイルのWindows

たとえば、次のように認証を記述した場合:

<authentication mode="Forms"/>

それから認証mode = "Forms"であるため、ユーザー名に対してnullを取得します。ただし、次のように認証モードをWindowsに変更すると、

<authentication mode="Windows"/>

アプリケーションを再度実行してユーザー名を確認すると、ユーザー名が正常に取得されます。

詳細については、「 System.Web.HttpContext.Current.User.Identity.Name Vs System.Environment.UserName in ASP.NET 」を参照してください。

25
Anurag Jain

Windows認証の場合

プロジェクトを選択します。

F4を押す

「匿名認証」を無効にし、「Windows認証」を有効にします

enter image description here

53
Anwar Ul Haq

「ユーザー」(別名)がログオンする必要があるネットワーク環境を想定します。通常、これはユーザーID(UID)とパスワード(PW)です。では、あなたのアイデンティティは何ですか、それともあなたは誰ですか?あなたはUIDであり、これはログオンセッションから「名前」を収集します。シンプル!また、Best Buyなどのログインが必要なインターネットアプリケーションでも動作するはずです。

これにより、使用する必要があるWebアプリケーションのデフォルトページを開いたときに、セッションからUIDまたは「名前」が取得されます。さて、私のインスタンスでは、私はドメインの一部であるため、初期のWindows認証を使用できます。そして、私が誰であるか、つまりコードの2番目の部分を確認する必要があります。フォーム認証に関しては、ワークステーション/コンピューターに送信されるチケット(おそらくCookie)に依存します。そして、コードは次のようになります。

string id = HttpContext.Current.User.Identity.Name;

// Strip the domain off of the result
id = id.Substring(id.LastIndexOf(@"\", StringComparison.InvariantCulture) + 1);

これで、私のビジネス名(別名UID)が表示され、画面に表示できます。

3
CRH

また、それを確認してください

<modules>
      <remove name="FormsAuthentication"/>
</modules>

このような何かを見つけた場合は、単に削除してください:

<remove name="FormsAuthentication"/>

Web.configからの行で、ここに行くと、うまくいきます。

2
Marconi Mac

[HttpContext.Current.User]はどのユーザー名が存在するか、または存在しないかをどのように知るのですか?

これが機能する1つの方法の例を見てみましょう。フォーム認証を使用しており、「OnAuthenticate」イベントが発生したとします。このイベントは、「 アプリケーションが現在の要求を認証するとき 」( 参照ソース )で発生します。

この時点まで、アプリケーションはあなたが誰なのかわかりません。

フォーム認証を使用しているため、最初にExtractTicketFromCookieへの呼び出しを介して認証Cookie(通常は 。ASPAUTH )を解析してチェックします。これはFormsAuthentication.Decryptを呼び出します(このメソッドはパブリックです。自分で呼び出すことができます!)。次に、Context.SetPrincipalNoDemandを呼び出して、Cookieをユーザーに変換し、Context.Userに詰め込みます( Reference Source )。

1
Brian