问题描述
我用vs2015新建了个webapi项目,自带了author2.0权限认证,运行起来访问api/values的时候提示<Message>已拒绝为此请求授权。</Message>,我访问/token路径时又提示{"error":"unsupported_grant_type"},不知道用户密码是什么,请问我如何获取token?跪求大神指点啊!!
解决方案
解决方案二:
大神在么?
解决方案三:
这个是因为你没有登录的原因,下面是我写的一个获取token的方法,你看看privatestringGetToken(stringhost){varclient=newRestClient(host);varrequest=newRestRequest("/token",Method.POST);request.AddParameter("grant_type","password");request.AddParameter("userName","用户名");request.AddParameter("password","密码");//request.AddHeader("Authorization",Convert.ToBase64String(Encoding.ASCII.GetBytes(clientId+":"+clientSecret)));varresponse=client.Execute(request);vars=JObject.Parse(response.Content)["access_token"].Value<string>();returns;}
你写的webapi下这个项目有个ApplicationOAuthProvider类,你可以在这里实现自己的登录方式///用户名密码的认证///</summary>///<paramname="context"></param>///<returns></returns>publicoverrideasyncTaskGrantResourceOwnerCredentials(OAuthGrantResourceOwnerCredentialsContextcontext){boolloginSuccess=true;intuserId=0;//令牌中间件提供者允许CORScontext.OwinContext.Response.Headers.Add("Access-Control-Allow-Origin",new[]{"*"});//验证用户名和密码varuserName=context.UserName;varpassword=context.Password;ManagerUseruser=newManagerUserCollection().Where(ManagerUser.Columns.UserName,userName).Where(ManagerUser.Columns.Password,password).Where(ManagerUser.Columns.DeleteMark,0).Load().FirstOrDefault();if(user!=null&&user.Id>0){//登录成功的处理loginSuccess=true;}elseloginSuccess=false;if(loginSuccess){varoAuthIdentity=newClaimsIdentity(context.Options.AuthenticationType);oAuthIdentity.AddClaim(newClaim(ClaimTypes.Name,context.UserName));oAuthIdentity.AddClaim(newClaim(ClaimTypes.UserData,userId.ToString()));varauthenticationProperties=newAuthenticationProperties();varticket=newAuthenticationTicket(oAuthIdentity,authenticationProperties);context.Validated(ticket);}else{context.SetError("invalid_grant","用户名或密码不正确。");return;}base.GrantResourceOwnerCredentials(context);}
解决方案四:
需要登录才能调用的吧
解决方案五:
引用2楼ymq_2012的回复:
这个是因为你没有登录的原因,下面是我写的一个获取token的方法,你看看privatestringGetToken(stringhost){varclient=newRestClient(host);varrequest=newRestRequest("/token",Method.POST);request.AddParameter("grant_type","password");request.AddParameter("userName","用户名");request.AddParameter("password","密码");//request.AddHeader("Authorization",Convert.ToBase64String(Encoding.ASCII.GetBytes(clientId+":"+clientSecret)));varresponse=client.Execute(request);vars=JObject.Parse(response.Content)["access_token"].Value<string>();returns;}你写的webapi下这个项目有个ApplicationOAuthProvider类,你可以在这里实现自己的登录方式///用户名密码的认证///</summary>///<paramname="context"></param>///<returns></returns>publicoverrideasyncTaskGrantResourceOwnerCredentials(OAuthGrantResourceOwnerCredentialsContextcontext){boolloginSuccess=true;intuserId=0;//令牌中间件提供者允许CORScontext.OwinContext.Response.Headers.Add("Access-Control-Allow-Origin",new[]{"*"});//验证用户名和密码varuserName=context.UserName;varpassword=context.Password;ManagerUseruser=newManagerUserCollection().Where(ManagerUser.Columns.UserName,userName).Where(ManagerUser.Columns.Password,password).Where(ManagerUser.Columns.DeleteMark,0).Load().FirstOrDefault();if(user!=null&&user.Id>0){//登录成功的处理loginSuccess=true;}elseloginSuccess=false;if(loginSuccess){varoAuthIdentity=newClaimsIdentity(context.Options.AuthenticationType);oAuthIdentity.AddClaim(newClaim(ClaimTypes.Name,context.UserName));oAuthIdentity.AddClaim(newClaim(ClaimTypes.UserData,userId.ToString()));varauthenticationProperties=newAuthenticationProperties();varticket=newAuthenticationTicket(oAuthIdentity,authenticationProperties);context.Validated(ticket);}else{context.SetError("invalid_grant","用户名或密码不正确。");return;}base.GrantResourceOwnerCredentials(context);}
好的,我试试看
解决方案六:
引用2楼ymq_2012的回复:
privatestringGetToken(stringhost){varclient=newRestClient(host);varrequest=newRestRequest("/token",Method.POST);request.AddParameter("grant_type","password");request.AddParameter("userName","用户名");request.AddParameter("password","密码");//request.AddHeader("Authorization",Convert.ToBase64String(Encoding.ASCII.GetBytes(clientId+":"+clientSecret)));varresponse=client.Execute(request);vars=JObject.Parse(response.Content)["access_token"].Value<string>();returns;}
这方法里的用户名和密码是什么?vs2015自带的认证方式里没看到查询数据库诶,还有就是他自己生成的代码里有GrantResourceOwnerCredentials这个方法,代码如下图这个代码有问题吗?
解决方案七:
难道vs2015新建的webapi自带的author认证是不完善的?不能直接拿来用吗?
解决方案八:
引用5楼ly496524246的回复:
Quote: 引用2楼ymq_2012的回复:
privatestringGetToken(stringhost){varclient=newRestClient(host);varrequest=newRestRequest("/token",Method.POST);request.AddParameter("grant_type","password");request.AddParameter("userName","用户名");request.AddParameter("password","密码");//request.AddHeader("Authorization",Convert.ToBase64String(Encoding.ASCII.GetBytes(clientId+":"+clientSecret)));varresponse=client.Execute(request);vars=JObject.Parse(response.Content)["access_token"].Value<string>();returns;}这方法里的用户名和密码是什么?vs2015自带的认证方式里没看到查询数据库诶,还有就是他自己生成的代码里有GrantResourceOwnerCredentials这个方法,代码如下图这个代码有问题吗?
你要是用vs自检的他用的ef生成的sql,你修改一下连接数据库的配置,然后生成一下,你也可以不用他们的登录方法,自己写登录方法