gpt4 book ai didi

c# - 在 ASP.NET 中验证 Oracle 用户

转载 作者:太空宇宙 更新时间:2023-11-03 22:51:15 26 4
gpt4 key购买 nike

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

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

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

编辑

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

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

最佳答案

此示例 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 文件夹的 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>

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

enter image description here

此应用程序使用 Oracle 的示例 HR 架构,可以从 HERE 下载.

enter image description here

关于c# - 在 ASP.NET 中验证 Oracle 用户,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47217932/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com