2017-11-10 12 views
0

私はOracleでデータベースを持ち、ASP.NETで設計したアプリケーションを持っています。私は彼らがアプリケーションにアクセスする前にユーザー認証を確認したい。ユーザーは、アプリケーションの表ではなくOracleで作成されます。ASP.NETでOracleユーザーを認証

asp.netを使用してOracleデータベースユーザーを認証することはできますか?

アプリケーションは、WebFormsおよびOracle .NET Data Providerライブラリを使用します。

EDIT

  1. 最初のページは、ユーザーがOracleユーザー名とパスワード
  2. システムは、Oracleに接続し、ユーザーを認証入るログインです。ユーザーはアプリケーション表ではなくOracleで作成されていることを覚えておいてください。
  3. 有効なユーザーがアプリケーションページを表示する場合。

(Iが正常にOracleに接続することができますが、Oracleユーザーを認証することはできません)

+3

これは、最も確実である...しかし、あなたはあなたのアプリケーションに関するいくつかのより多くの情報が含まれている場合、あなたはより良い答えを得るでしょう。例えば。どのバージョン、どのフレームワーク(MVC、WebApi、Webフォーム)、どのような認証を使用したいのですか –

+0

もちろんです。しかし、このためには、asp.netで完全な認証機能を実装する必要があります。 jstreetによって投稿されたリンクはかなり役に立ちます –

+0

アプリケーション私はプログラミングASP.NETです。データベースはOracleです。もちろん、最初のページはログインページです。ユーザー名とパスワードを入力します。しかし、それはあなたが探しているものですか?アプリケーションにアクセスする前にユーザー認証をチェックしたいと言っていますが、最初にログインするかどうかを確認する必要がありますか? @ ste-fuさんのように、より多くの情報を提供してください。 – user3454439

答えて

2

このサンプルWebフォーム・アプリケーションは、Oracleデータベースからユーザーを認証するために、HEREの手順に従います。このアプリケーションは、認証されたユーザーのみがアクセスできる制限されたフォルダにRestrictedPageを作成します。制限されたページにアクセスしようとする匿名ユーザーはLoginページにリダイレクトされます。また、認証されたユーザーがログアウトすると、そのアプリはDefaultホームページにリダイレクトされます。

enter image description here

RestrictedPage.aspx:

<asp:Content ID="Content1" ContentPlaceHolderID="MainContent" runat="server"> 
    <h1>Restricted Page</h1> 
    <asp:GridView ID="GridView1" runat="server" AllowPaging="True" AutoGenerateColumns="False" DataKeyNames="EMPLOYEE_ID" DataSourceID="SqlDataSource1"> 
    <Columns> 
     <asp:BoundField DataField="EMPLOYEE_ID" HeaderText="EMPLOYEE_ID" ReadOnly="True" SortExpression="EMPLOYEE_ID" /> 
     <asp:BoundField DataField="FIRST_NAME" HeaderText="FIRST_NAME" SortExpression="FIRST_NAME" /> 
     <asp:BoundField DataField="LAST_NAME" HeaderText="LAST_NAME" SortExpression="LAST_NAME" /> 
     <asp:BoundField DataField="EMAIL" HeaderText="EMAIL" SortExpression="EMAIL" /> 
    </Columns> 
</asp:GridView> 
<asp:SqlDataSource ID="SqlDataSource1" runat="server" ConnectionString="<%$ ConnectionStrings:ConnectionString %>" ProviderName="<%$ ConnectionStrings:ConnectionString.ProviderName %>" SelectCommand="select employee_id, first_name, last_name, email from hr.employees where employee_id &lt; 150"></asp:SqlDataSource> 
</asp:Content> 

Site.Master:のみdiv関心を示します。残りは、VSプロジェクトテンプレートによって作成された標準的な定型マークアップです。

<div class="navbar-collapse collapse"> 
    <ul class="nav navbar-nav"> 
     <li><a runat="server" href="~/">Home</a></li> 
     <li><a runat="server" href="~/About">About</a></li> 
     <li><a runat="server" href="~/Contact">Contact</a></li> 
     <li><a runat="server" href="~/Restricted/RestrictedPage">Restricted</a></li> 
    </ul> 
    <asp:LoginView runat="server" ViewStateMode="Disabled"> 
     <AnonymousTemplate> 
      <ul class="nav navbar-nav navbar-right"> 
       <li><a runat="server" href="~/Account/Register">Register</a></li> 
       <li><a runat="server" href="~/Account/Login">Log in</a></li> 
      </ul> 
     </AnonymousTemplate> 
     <LoggedInTemplate> 
      <ul class="nav navbar-nav navbar-right"> 
       <li><a runat="server" href="~/Account/Manage" title="Manage your account">Hello, <%: Context.User.Identity.GetUserName() %> !</a></li> 
       <li> 
        <asp:LoginStatus runat="server" LogoutAction="Redirect" LogoutText="Log off" LogoutPageUrl="~/" OnLoggingOut="Unnamed_LoggingOut" /> 
       </li> 
      </ul> 
     </LoggedInTemplate> 
    </asp:LoginView> 
</div> 

IdentityModels.cs:このメソッドは、対応するOracleスキーマテーブルにエンティティモデルを関連付ける/作成するために添加されます。

protected override void OnModelCreating(DbModelBuilder modelBuilder) 
{ 
    base.OnModelCreating(modelBuilder); // MUST go first. 

    modelBuilder.HasDefaultSchema("YOUR_SCHEMA"); // Use uppercase! 

    modelBuilder.Entity<ApplicationUser>().ToTable("AspNetUsers"); 
    modelBuilder.Entity<IdentityRole>().ToTable("AspNetRoles"); 
    modelBuilder.Entity<IdentityUserRole>().ToTable("AspNetUserRoles"); 
    modelBuilder.Entity<IdentityUserClaim>().ToTable("AspNetUserClaims"); 
    modelBuilder.Entity<IdentityUserLogin>().ToTable("AspNetUserLogins"); 
} 

のWeb.config:これはRestrictedフォルダのWeb設定ファイルです。

<?xml version="1.0"?> 
<configuration> 
    <location path="RestrictedPage.aspx"> 
    <system.web> 
     <authorization> 
     <deny users="?"/> 
     </authorization> 
    </system.web> 
    </location> 
</configuration> 

のWeb.config:これらは、アプリケーションのルートフォルダにあるグローバルアプリケーション設定ファイルに行われた関心の追加です。

<connectionStrings> 
    <add name="DefaultConnection" connectionString="Data Source=your_server_name;User ID=your_user_id;Password=xxxxxxxx;" 
     providerName="Oracle.ManagedDataAccess.Client" /> 
    </connectionStrings> 

    <entityFramework> 
    <defaultConnectionFactory type="System.Data.Entity.Infrastructure.SqlConnectionFactory, EntityFramework" /> 
    <providers> 
     <provider invariantName="System.Data.SqlClient" type="System.Data.Entity.SqlServer.SqlProviderServices, EntityFramework.SqlServer" /> 
     <provider invariantName="Oracle.ManagedDataAccess.Client" 
     type="Oracle.ManagedDataAccess.EntityFramework.EFOracleProviderServices, Oracle.ManagedDataAccess.EntityFramework" /> 
    </providers> 
    </entityFramework> 

ここで参照する資料に記載されているスクリプトによって作成された必要なAspNet.Identityテーブルを示すOracleデータベーススキーマです。

enter image description here

このアプリは、HEREからダウンロードすることができますOracleのサンプルHRスキーマを使用しています。

enter image description here

0

あなたは、データ機能しているすべてのためSystem.Data.OracleClient.dllへの名前空間を使用したいと思います。 System.Data.SqlClientのように動作します。 VB:http://support.microsoft.com/default.aspx?scid=kb;en-us;308157 C#:http://support.microsoft.com/default.aspx?scid=kb;en-us;301240 Sqlの内容をOracleの呼び出しで置き換える必要がありますが、あまり難しくありません。

+0

[こちら](https://docs.microsoft.com/en-us/dotnet/framework/data/adonet/oracle-and-adonet)をご覧ください: 'System.Data.OracleClient'の型は**非推奨です**。このタイプは現在のバージョンの.NET Frameworkではサポートされていますが、将来のリリースでは削除されます。サードパーティのOracleプロバイダーを使用することをお勧めします._ – jsanalytics