首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

WCF UserName身份验证:我可以在自定义ServiceAuthorizationManager中获取用户名吗?

在WCF(Windows Communication Foundation)中,UserName身份验证是一种常见的身份验证方式,它使用用户名和密码对客户端进行身份验证。在自定义ServiceAuthorizationManager中,您可以获取到用户名,并根据需要进行进一步的授权处理。

以下是一个简单的示例,演示如何在自定义ServiceAuthorizationManager中获取用户名:

代码语言:csharp
复制
public class CustomServiceAuthorizationManager : ServiceAuthorizationManager
{
    protected override bool CheckAccessCore(OperationContext operationContext)
    {
        // 获取用户名
        string userName = GetUserName(operationContext);

        // 在这里进行授权处理
        // ...

        return true;
    }

    private string GetUserName(OperationContext operationContext)
    {
        // 获取ServiceSecurityContext
        ServiceSecurityContext securityContext = operationContext.ServiceSecurityContext;

        // 获取AuthorizationContext
        AuthorizationContext authorizationContext = securityContext.AuthorizationContext;

        // 获取用户名
        string userName = null;
        foreach (ClaimSet claimSet in authorizationContext.ClaimSets)
        {
            foreach (Claim claim in claimSet)
            {
                if (claim.Right == Rights.Identity && claim.Resource is SecurityIdentifier)
                {
                    userName = (claim.Resource as SecurityIdentifier).Translate(typeof(NTAccount)).Value;
                    break;
                }
            }
        }

        return userName;
    }
}

在上面的示例中,我们通过ServiceSecurityContext和AuthorizationContext获取到了用户名。您可以根据需要进行进一步的授权处理。

需要注意的是,在使用UserName身份验证时,需要使用安全的通信协议(如HTTPS)来保证用户名和密码的安全传输。此外,UserName身份验证的性能可能不如其他身份验证方式,因此在大规模应用中需要谨慎使用。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

利用WCF自定义授权模式提供当前Principal

《原理篇》我们谈到:如果采用自定义安全主体权限模式,我们可以通过自定义AuthorizationPolicy或者ServiceAuthorizationManager实现对基于当前认证用于相关的安全主体的提供...而其中唯一值得一提的是当前认证用户名获取。...而该Claim对象的Resource就是用户名得到当前认证用户名之后,相应的GenericPrincipal对象被创建出来,并被置于EvaluationContext的属性列表。...AuthorizationPolicy不同的是,认证用户的获取在这里变得更加容易,我们直接可以通过当前ServiceSecurityContext的PrimaryIdentity获取。...[WCF权限控制]利用WCF自定义授权模式提供当前安全主体[原理篇] [WCF权限控制]利用WCF自定义授权模式提供当前安全主体[实例篇]

770110

WCF自定义授权体系详解

《原理篇》,我们谈到WCF自定义授权体系具有两个核心的组件:AuthorizationPolicy和ServiceAuthorizationManager,已经它们是如何写作最终提供一种基于声明的授权实现...虽然这个简单的授权完全可以通过相应的服务操作方法上应用PrincipalPermissionAttribute并指定Name属性来实现。...该方法主要的逻辑是这样的:通过EvaluationContext现有的声明集获取当前的用户名(声明类型和声明权限分别为ClaimTypes.Name和Rights.PossessProperty)。...针对获取出来的用户名,创建于被授权服务操作关联的声明。...", operation); 11: } 12: } 如下的代码,我们分别以用户名Foo和Bar的名义通过上面的Invoke辅助方法对计算服务的四个操作进行访问。

89880

利用WCF自定义授权模式提供当前Principal

《通过扩展自行实现服务授权》一文通过自定义CallContextInitializer的方式操作方法之前之前根据认证用户设置了当前线程的安全主体,从而实现授权的目的。...ServiceAuthorizationBehavior选择Custom安全主体权限模式的情况下,除了自定义AuthorizationPolicy,你还可以通过自定义ServiceAuthorizationManager...实际上最终的授权判断实现在受保护方法CheckAccessCore,并且ServiceAuthorizationManager该方法直接返回True。...从当前AuthorizationContext获取安全主体之前对其进行初始化,整个基于安全主体的授权体系就能正常运作,而这个工作可以通过自定义ServiceAuthorizationManager来实现...而在ServiceAuthorizationBehavior的配置节ServiceAuthorizationManager对应的配置属性为serviceAuthorizationManager,你可以通过该配置属性将设置自定义

44290

WCF自定义授权体系详解

之所以说这么多,主要是为说明一个问题:授权策略有时候需要手工定制。而作为一种基于可扩展性的通信框架,WCF授权方面提供了扩展点,使你可以根据的你实际需要定制相应的授权策略。...权限可以是读取、写入或拥有。值可以是数据库、文件、邮箱或属性。声明还具有声明类型。声明类型和权限的组合提供了用于针对该值指定的功能的机制。WCF安全应用编程接口中,生命通过类型Claim表示。...DispatchRuntime类型,具有两个同名的属性。...一般地,我们通过自定义AuthorizationPolicy的目的在于通过实现的Evaluate方法中将基于你自定义授权策略相关的声明集添加到EvaluationContext的ClaimSets。...为了让自定义授权有深刻的理解,《实例篇》我们将演示一个简单的实例为你展示如何通过自定义AuthorizationPolicy和ServiceAuthorizationManager实现非角色授权,敬请期待

789100

WCF自定义授权体系详解

之所以说这么多,主要是为说明一个问题:授权策略有时候需要手工定制。而作为一种基于可扩展性的通信框架,WCF授权方面提供了扩展点,使你可以根据的你实际需要定制相应的授权策略。...权限可以是读取、写入或拥有。值可以是数据库、文件、邮箱或属性。声明还具有声明类型。声明类型和权限的组合提供了用于针对该值指定的功能的机制。WCF安全应用编程接口中,生命通过类型Claim表示。...这两个对象是如何参与到WCF的授权执行流程的呢?...DispatchRuntime类型,具有两个同名的属性。...一般地,我们通过自定义AuthorizationPolicy的目的在于通过实现的Evaluate方法中将基于你自定义授权策略相关的声明集添加到EvaluationContext的ClaimSets

846100

WCF的安全审核——记录谁在敲打你的门

在下面的配置定义了一个包含了ServiceSecurityAuditBehavior的服务行为,并对其四个属性进行了显式设置。...如下面的代码片段所示,对于定义ServiceSecurityAuditBehavior的四个属性,DispatchRuntime具有相应的定义。...WCF认证和授权成功或者失败的时候,会根据该运行时这四个属性进行相应安全审核日志。...为了迎合安全审核对“授权失败”的判断,Service项目中创建了如下一个简单的自定ServiceAuthorizationManager。...再次运行我们的程序,将会得到分别代表授权成功和失败的两条审核日志,并且日志还包含了我们自定的ServiceAuthorizationManager类型(ServiceAuthorizationManager

76490

WCF服务端运行时架构体系详解

但是你可以通过自定义一个被称为实例提供者的组件来让WCF服务端分发系统按照你希望的方式创建你想要的实例作为最终的服务实例。...比如说,如果说客户端希望向服务端传输一些与功能无关的上下文信息,可以将其封装成消息报头并添加到请求消息。你就可以通过这个消息检验机制将上下文信息从相应的消息报头中获取出来。...如果后续处理需要相应的控制信息,你可以将其通过该机制将这些信息以消息报头的方式至于传输的消息之中。 消息的检验机制通过自定义消息检验器(MessageInspector)。...根据具体应用针对消息检查的需要,你可以该列表添加任意的分发消息检验器,它们按照添加的顺序依次执行。 6、操作与操作选择 我们说了,服务端分发体系对消息请求处理最终体现在多相应操作方法的执行。...关于会话的相关内容,WCF技术剖析(卷1)》第9章《实例管理与会话》具有详细的介绍。

76780

WinForm企业应用框架设计【五】系统登录以及身份验证+源码

summary> /// 从WCF获取所有菜单 /// private void PrepareMenus() {...就这些东西~ ---------------------------------------- 遗留问题 试图ClientFactory获取服务端反馈的错误 ((IClientChannel)proxy...--- 这个系列到此将告一段落 以后或许我会写增加更多东西 比如通用的权限、人事管理、定制表单、定制流程等 此为后话 ---------------------------------------- 正在研究一个...silverlight上实现的类似的框架 已略有小成 但我想,还是应该先把DotNet4应用程序打包工具系列写完 再写silverlight的东西 (透露一下,已经把那个工具做成了,自由度非常高的打包工具...,您可以用他来打包dotnet 2\3.5\4,以及其他的注册表里留下痕迹的东西) ---------------------------------------- 如各位所愿 公布出代码和数据库备份

58420

快速入门系列--WCF--07传输安全、授权与审核

因此对于WCF来说,其传输安全主要涉及认证、消息一致性和机密性三个主题,认证不仅包括服务器对客户端的认证,也包括客户端对服务的身份验证,即双向验证,消息一致性保证消息的内容传输过程不被篡改,机密性确保只有希望的消息接收方才能读取其中内容...认证和凭证:常见的认证方式包括用户名密码认证,例如Windows认证、Membership模块、自定义认证等;NTLM,windows认证是实现单点登录的理想方式,其通过账号密码得到一个凭证,凭证超时前...之前介绍的主要是安全概念,接下来则在WCF,安全的具体实践。...;用户名,支持Windows、Membership、Custom三种,尤其是Membership的使用,请见接下来的代码示例;X.509证书,客户端可以通过ChannelFactory.Credentials.ClientCertificate.SetCertificate...windows,安全主体被保存在TLS线程本地变量上,可以通过Thread.CurrentPrincipal获取

80790

WCF版的PetShop之三:实现分布式的Membership和上下文传递

,通过Initialize方法获取配置的终结点名称并创建服务代理。...比如在PetShop,服务端进行审核(Audit)的时候,须要获取当前登录的用户名。而登录用户名仅仅对于Web服务器可得,所以每次服务调用的过程,需要从客户端向服务端传递。...} 59: } 60: } 61: } 2、ApplicationContextWCF服务调用的传递 下面我们来介绍一下如何实现上下文信息WCF服务调用过程的...PetShop,我们通过WCF的扩展实现此项功能。...,上面自定义的ClientMessageInspector和CallContextInitializer可以通过相应的WCF行为(服务行为、终结点行为、契约行为或者操作行为)应用到WCF执行管道

71860

安全之剑:深度解析 Apache Shiro 框架原理与使用指南

方法,你可以根据传入的AuthenticationToken进行用户身份验证;而在doGetAuthorizationInfo方法,你可以根据PrincipalCollection获取用户的权限信息...接着,调用currentUser.login(token)方法进行身份验证,如果身份验证失败,将会抛出AuthenticationException异常,你可以catch块处理相应的异常信息。...(username, password, getName());}在这个简单的身份验证逻辑,我们通过UsernamePasswordToken获取到用户输入的用户名,然后假设在数据库查询到了对应的用户信息...String username = token.getUsername(); // 实际项目中,这里通常是从数据库根据用户名查询用户信息 // 这里为了演示,我们假设存在一个用户...这样,整个用户会话期间,我们都可以通过SecurityUtils.getSubject().getSession().getAttribute("currentUsername")获取到当前用户的用户名

71110

谈谈WCF的客户端认证

对于基于Internet的应用,基于用户名和密码的认证方式是最为常用的,而WCF为你提供了不同模式的用户名认证方式。首先还是从用户凭证的表示说起。...验证用户名和密码; 自定义:通过继承抽象类UsernamePasswordValidator,自定义用户名/密码验证器进行验证。...而所有应用记录维护aspnet_Applications这么一个表。现在我们需要通过执行下面一段SQL脚本该表添加一条表示我们应用的记录。...到目前为止,我们创建的数据库并没有用户帐户记录。为了演示认证的效果,我们必须创建相关用户帐户记录。为了省事,直接将相关的代码写在了服务寄宿的代码。...在下面的代码进行了两次服务调用。但是创建服务代理对象的ChannelFactory被设置了不同的用户名凭证。

1.1K100

你有没有遇到要实现多种登录方式的场景丫 一起来看看咯 Spring Security 实现多种登录方式,如常规方式外的邮件、手机验证码登录

你好丫,是博主宁春,一起加油吧!!!...填写邮件号码,获取验证码 输入获取到的验证码进行登录(登录的接口:/email/login,这里不能使用默认的/login,因为我们是扩展) 自定义的过滤器 EmailCodeAuthenticationFilter...,建议大家可以使用的时候,多去看看,这里去除了一些不是和这个相关的代码。...但是它是一个抽象类,但其实就一个步骤它的实现类实现的,很简单,稍后会讲到。 在这个源码把和检查相关的一些操作都给删除,只留下几个重点,我们一起来看一看哈。...主要就是做下面几件事: 将过滤器、认证器注入到spring 将登录成功处理、登录失败处理器注入到Spring,或者自定义过滤器对登录成功和失败进行处理。

1.3K20

初识Shiro

Realm Shiro在运行的过程,从Realm获取安全数据,比如用户的权限、角色等,每当SecurityManager要验证用户身份的时候,那么他就从Realm获取相应的数据进行比对,这个有点类似于...3.从SecurityUtils获取到一个Subject实例 4.通过UsernamePasswordToken对象创建用户名密码身份验证Token 5.调用Subject的login方法执行登录操作...OK,我们登录的过程,输入正确的用户名和密码就能成功登录。...自定义Realm OK,上个案例,我们ini文件预设了数据源,当然我们也可以自定义Realm,前面我们也说过Realm相当于是我们的数据源,我们可以Realm来进行数据匹配,自定义Realm需要我们实现...属性,jdbcRealm还有dataSource,就是我们自定义的数据源,其他的都是数据库连接的东西,就不再赘述。

86050

安全框架shiro入门示例

onAccessDenied方法里,获取客户端传递的用户名,流水号以及摘要字段,并用这些字段生成一个token用于验证(login)。...;它会委托给Authenticator进行身份验证;Authenticator才是真正的身份验证者,Shiro API核心的身份认证入口点,此处可以自定义插入自己的实现; Authenticator会把相应的...,Shiro API核心的身份认证入口点,此处可以自定义插入自己的实现 @Override protected AuthenticationInfo doGetAuthenticationInfo...(username);//根据用户名获取密钥(和客户端的一样) //服务器端生成客户端参数消息摘要 String serverDigest = HmacSHA256Utils.digest...Shiro从从Realm获取安全数据,然后和客户端传递的进行比较验证用户身份的合法性。 简单起见,写了一个固定密钥,没有从数据库取,不过原理是一样的。

42430

【SpringSecurity】快速入门—通俗易懂

它提供了一个方法loadUserByUsername(String username)用于用户名获取用户的详细信息。...// 该User对象所需的参数,密码必须加密(由springsecurity要求),因为前面已经SecurityConfig配置了加密器,所以这里就不需要对密码进行加密。...UserDetailsService是Spring Security的一个接口,它有一个方法loadUserByUsername,用于根 据用户名获取用户信息。...图中只展示了核心过滤器,其它的非核心过滤器并没有图中展示。 UsernamePasswordAuthenticationFilter: 用于处理基于表单的登录请求,从表单获取用户名和 密码。...从表单获取用户名和密码时,默认使用的表单 name 值为 username 和 password。

29940

快速入门系列--WCF--08扩展与新特性

最后一章将进行WCF扩展和新特性的学习,这部分内容有一定深度,有一个基本的了解即可,当需要自定义一个完整的SOA框架时,可以再进行细致的学习和实践。...WCF,终结点ServiceEndpoint和其分发器EndpointDispatcher一一对应。...,运行时操作列表和用于选择操作的选择器,自己项目构建中很多时候可以参考这样的方式。...ServiceHost对WCF的扩展一般是通过继承自ServiceHost的自定义类来实现,但需要注意,对Description、分发运行时的定制是无效的,此外可以通过自定义类来集成Unity。...前者客户端一定的网络范围内以广播的形式发送探测Probe消息搜索目标服务,该探测消息,包含相应的搜寻条件,不过感觉管理性很差,不推荐。

60870

SpringSecurity的使用

介绍 ​ web开发,安全是特别重要的!一般我们实现安全的手段有过滤器、拦截器… 我们使用SpringSecurity、shiro两个框架是为了更加简洁的实现安全。...默认为login //usernameParameter : 执行身份验证时查找用户名的 HTTP 参数。...默认值为“username” 也可以自定义修改,但是必须和对应属性的name相同用户名参数 – 执行身份验证时查找用户名的 HTTP 参数 //password和username处理方法相同...("/login"); //防止用户信息被获取 http.csrf().disable(); //作用是记住, 也就是保存cookie,当我们退出网站时,当时登录的用户不会退出...,一般默认保存的cookie为两周 //rememberMeParameter的内容时点击记住按钮的name属性 http.rememberMe().rememberMeParameter

11910

扫码

添加站长 进交流群

领取专属 10元无门槛券

手把手带您无忧上云

扫码加入开发者社群

相关资讯

热门标签

活动推荐

    运营活动

    活动名称
    广告关闭
    领券