首页 新闻 会员 周边

Authorize 使用问题看了好多书资料都 看不懂

0
悬赏园豆:50 [已解决问题] 解决于 2017-07-29 14:51

问题1. 控制器上加了[Authorize]  在登录代码应该怎么写,他才不会又跳回到登录器
问题2.控制器上加了[Authorize(Roles="admin")] 要怎么写给他赋予权限
问题3.控制器上加了[Authorize(Users ="lfh")] 要怎么写给他赋予权限

 

会其中一个也可以 回答,麻烦指点下

Aaron_Net的主页 Aaron_Net | 初学一级 | 园豆:156
提问于:2017-07-29 11:36
< >
分享
最佳答案
0

用identity

收获园豆:50
吴瑞祥 | 高人七级 |园豆:29449 | 2017-07-29 13:42

应该怎么写呀

Aaron_Net | 园豆:156 (初学一级) | 2017-07-29 13:43

@Aaron_Net: ?如果你自己写.就是给User赋值

using System;
using System.Collections.Generic;
using System.Linq;
using System.Net.Http;
using System.Security.Claims;
using System.Security.Principal;
using System.Threading;
using System.Threading.Tasks;
using System.Web;

namespace Api.ApiExtend.Handlers
{
    /// <summary>
    ///token授权提供器
    /// 解析请求头中basic授权信息
    /// </summary>
    public class YwartTokenAuthProvider : DelegatingHandler
    {
        /// <summary>
        /// 以异步操作发送 HTTP 请求到内部管理器以发送到服务器。
        /// <param name="request">要发送到服务器的 HTTP 请求消息。</param>
        /// <param name="cancellationToken">取消操作的取消标记。</param>
        /// <returns> 返回 System.Threading.Tasks.Task`1。 表示异步操作的任务对象。</returns>
        /// </summary>
        protected override Task<HttpResponseMessage> SendAsync(HttpRequestMessage request, CancellationToken cancellationToken)
        {
            Authorized(request);
            return base.SendAsync(request, cancellationToken);
        }
        private void Authorized(HttpRequestMessage request)
        {

            if (request == null || request.Headers == null || request.Headers.Authorization == null || request.Headers.Authorization.Scheme != "Token")
            {
                return;
            }

            Guid token;
            if (!Guid.TryParse(request.Headers.Authorization.Parameter, out token))
            {
                return;
            }

            var tokenModel = DbFactory.AccessToken
                .Single(m =>
                    m.Token == token.ToString()
                    && m.IsDel == false
                    && m.Timeout > DateTime.Now);
            if (tokenModel == null)
            {
                return;
            }
            var user = DbFactory.User.Single(m => m.Id == tokenModel.UserId);
            if (user == null)
            {
                return;
            }
            var userEntity = new UserEntity
            {
            };

            var identity = new GenericIdentity(userEntity.Id.ToString(), "Token");
            identity.AddClaim(new Claim(ClaimTypes.UserData, userEntity.ToJson()));
            identity.AddClaim(new Claim("UserInfo.Id", user.Id.ToString()));
            //将用户实体序列化放到声明中
            IPrincipal principal = new GenericPrincipal(identity, new string[] { });
            Thread.CurrentPrincipal = principal;
            if (HttpContext.Current != null)
            {
                HttpContext.Current.User = principal;
            }
        }
    }
}

这是我们公司用的授权提供处理

吴瑞祥 | 园豆:29449 (高人七级) | 2017-07-29 13:52

@吴瑞祥: 要怎么用呀!!

Aaron_Net | 园豆:156 (初学一级) | 2017-07-29 14:15

@吴瑞祥: 控制 器 中给个授权例子呀模拟一下

Aaron_Net | 园豆:156 (初学一级) | 2017-07-29 14:15

@吴瑞祥: 大兄弟,加个我3350823838 或威信 ASD124FGH,,指导下,,

Aaron_Net | 园豆:156 (初学一级) | 2017-07-29 14:17

@Aaron_Net: 控制器里就[Authorize]  就可以了.

吴瑞祥 | 园豆:29449 (高人七级) | 2017-07-29 14:31

@吴瑞祥: 虽然没懂,谢谢了

Aaron_Net | 园豆:156 (初学一级) | 2017-07-29 14:52
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册