[ad_1]
OWIN モジュールを使用して、ASP.Net Web フォーム Web サイト/アプリケーションに Azure 経由の認証を正常に実装しました。 ただし、認証されたユーザーの ID を取得しようとすると、空の文字列が表示または返されるようです
これが私の認証コードです
Try System.Net.ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls11 Or SecurityProtocolType.Tls12 Dim redirectUri As String = ConfigurationManager.AppSettings("ida:RedirectUri") Dim authProperties As New AuthenticationProperties authProperties.RedirectUri = redirectUri HttpContext.Current.GetOwinContext().Authentication.Challenge(authProperties, OpenIdConnectAuthenticationDefaults.AuthenticationType) Catch ex As Exception LblErrorMsg.Text = ex.Message PnlError.Visible = True Exit Sub End Try
そしてこれが私のStartup.vbクラスです
Imports Microsoft.Owin.Security.OpenIdConnect Imports Microsoft.Owin.Security.Notifications Imports System.Threading.Tasks Imports System Imports Microsoft.Owin.Host.SystemWeb <Assembly: OwinStartup("MyStartupClass", GetType(Startup))> Public Class Startup Private clientId As String = System.Configuration.ConfigurationManager.AppSettings("ida:ClientId") Private redirectUri As String = System.Configuration.ConfigurationManager.AppSettings("ida:RedirectUri") Shared tenant As String = System.Configuration.ConfigurationManager.AppSettings("ida:Tenant") Private authority As String = String.Format(System.Globalization.CultureInfo.InvariantCulture, System.Configuration.ConfigurationManager.AppSettings("ida:Authority"), tenant) Public Sub Configuration(ByVal app As IAppBuilder) app.SetDefaultSignInAsAuthenticationType(CookieAuthenticationDefaults.AuthenticationType) app.UseCookieAuthentication(New CookieAuthenticationOptions With { .CookieManager = New SystemWebCookieManager() }) app.UseOpenIdConnectAuthentication(New OpenIdConnectAuthenticationOptions With { .ClientId = clientId, .Authority = authority, .RedirectUri = redirectUri, .PostLogoutRedirectUri = redirectUri, .Scope = OpenIdConnectScope.OpenIdProfile, .ResponseType = OpenIdConnectResponseType.IdToken, .TokenValidationParameters = New TokenValidationParameters() With { .ValidateIssuer = False }, .Notifications = New OpenIdConnectAuthenticationNotifications With { .AuthenticationFailed = AddressOf OnAuthenticationFailed } }) End Sub Private Function OnAuthenticationFailed(ByVal context As AuthenticationFailedNotification(Of OpenIdConnectMessage, OpenIdConnectAuthenticationOptions)) As Task context.HandleResponse() context.Response.Redirect("/?errormessage=" & context.Exception.Message) Return Task.FromResult(0) End Function End Class
これは、ダッシュボードページでサインインしているユーザーを取得するために使用しているコードです
Dim name As String = "" If HttpContext.Current.GetOwinContext().Authentication.User.Identity.IsAuthenticated = True Then name = HttpContext.Current.GetOwinContext().Authentication.User.Identity.Name End If
私が試したこと:
web.configでWindows認証を無効にしようとしましたが、ユーザー名は空の文字列のままです
解決策 1
Microsoft のドキュメントと Owin の使用は、次のいくつかを確認することを提案しています。答えはここにあるかもしれないと信じています。
1. 必要な NuGet パッケージが正しくインストールされていること、および OWIN および Azure AD 認証に使用できることを確認します。
2. Web.config ファイルで Azure AD 構成を確認します。 ida:ClientId、ida:RedirectUri、ida:Tenant、および ida:Authority の値が Web.config ファイルの appSettings セクションで正しく構成されていることを確認します。
3. Azure AD アプリの登録に正しいリダイレクト URI が登録されていることを確認します。 Azure AD アプリの登録で構成されたリダイレクト URI は、Web.config ファイルで指定された ida:RedirectUri 値と一致する必要があります。
4. 必要なミドルウェアが Startup.vb ファイルの app.UseCookieAuthentication 構成および app.UseOpenIdConnectAuthentication 構成で正しく構成されていることを確認します。
5. Azure AD アプリの登録で適切なアクセス許可が構成されていることを確認します。 構成されたアクセス許可は、OpenIdConnectAuthenticationOptions の OpenIdConnectScope プロパティと一致する必要があります。
解決策 2
問題の根本原因はわかりませんが、別の方法を考え出しました。それは、OWIN によって公開されている Claims オブジェクトを使用してユーザー名を取得するというものです。
If HttpContext.Current.GetOwinContext().Authentication.User.Identity.IsAuthenticated = True Then name = HttpContext.Current.GetOwinContext().Authentication.User.Claims.Where(Function(x) x.Type = "preferred_username").Single.Value.ToString End If
[ad_2]
コメント