在 ASP.NET 中对 Oracle 用户进行身份验证

mrd*_*mrd 3 c# asp.net oracle

我有 Oracle 数据库和 ASP.NET 设计的应用程序。我想在用户访问应用程序之前检查用户身份验证。用户是在 Oracle 中创建的,而不是在应用程序的表中创建的。

是否可以使用asp.net对Oracle数据库用户进行身份验证?

该应用程序使用 WebForms 和 Oracle .NET Data Provider 库。

编辑

  1. 第一页是登录页面,用户输入 Oracle 用户名和密码
  2. 系统连接到 Oracle 并验证用户身份。请记住,用户是在 Oracle 中创建的,而不是在应用程序表中创建的。
  3. 如果有效用户则显示应用程序页面。

(我可以成功连接Oracle,但无法验证Oracle用户)

jsa*_*ics 5

此示例 Web 表单应用程序遵循此处概述的步骤,以便从 Oracle 数据库对用户进行身份验证。该应用程序RestrictedPage在仅限经过身份验证的用户访问的受限文件夹中创建一个。尝试访问受限页面的匿名用户将被重定向到该Login页面。一旦经过身份验证的用户注销,应用程序会将其重定向到主页Default

在此输入图像描述

受限页面.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>
Run Code Online (Sandbox Code Playgroud)

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>
Run Code Online (Sandbox Code Playgroud)

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");
}
Run Code Online (Sandbox Code Playgroud)

Web.config:这是该Restricted文件夹的 Web 配置文件。

<?xml version="1.0"?>
<configuration>
  <location path="RestrictedPage.aspx">
    <system.web>
      <authorization>
        <deny users="?"/>
      </authorization>
    </system.web>
  </location>
</configuration>
Run Code Online (Sandbox Code Playgroud)

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>
Run Code Online (Sandbox Code Playgroud)

下面是 Oracle 数据库架构,显示了AspNet.Identity参考文章中列出的脚本创建的所需表。

在此输入图像描述

该应用程序使用 Oracle 的示例架构,可以从此处HR下载。

在此输入图像描述