在ASP.NET中验证Oracle用户

时间:2017-11-10 07:45:33

标签: c# asp.net oracle

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

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

该应用程序使用WebForms和Oracle .NET数据提供程序库。

编辑

  1. 首页登录用户输入Oracle用户名和密码
  2. 系统连接到Oracle并对用户进行身份验证。请记住用户是在Oracle中创建的而不是在应用程序表中创建
  3. 如果有效用户则显示申请页面。
  4. (我可以成功连接到Oracle,但无法对Oracle用户进行身份验证)

2 个答案:

答案 0 :(得分:3)

此示例Web表单应用程序遵循概述HERE的步骤,以便从Oracle数据库验证用户身份。该应用在受限文件夹中创建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文件夹的网络配置文件。

<?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>

这是Oracle数据库架构,显示了由引用文章中列出的脚本创建的所需AspNet.Identity表。

enter image description here

此应用使用可从HERE下载的Oracle示例HR架构。

enter image description here

答案 1 :(得分:0)

您希望将System.Data.OracleClient命名空间用于所有数据功能。它的行为或多或少类似于System.Data.SqlClient。根据您使用的是C#还是VB,看看其中一篇知识库文章:VB:http://support.microsoft.com/default.aspx?scid=kb;en-us;308157 C#:http://support.microsoft.com/default.aspx?scid=kb;en-us;301240您必须用Oracle调用替换Sql内容,但是不应该太难。