oauth2.0 php简化模式,asp.net权限认证:OWIN实现OAuth 2.0 之简化模式(Implicit)

本文介绍了ASP.NET环境下OAuth的简化模式授权流程,包括用户授权、访问令牌获取及使用。在实现过程中,遇到了跨域问题,通过在ResourceServer项目中引入CORS并配置,成功解决了这个问题,使得客户端能够正常访问受保护的API资源。
摘要由CSDN通过智能技术生成

简化模式定义

通过客户端的后台服务器,与“服务提供商”的认证服务器进行认证。(和授权码模式差不多哦)

1、用户访问客户端,后者将前者导向认证服务器。

2、用户选择是否给予客户端授权。

3、假设用户给予授权,认证服务器会直接向客户端发送访问令牌(access token)。

4、Client拿着access token去访问Resource资源

注意:红色字体部分是与授权码模式最根本的区别哦

简化模式的工作流程图:

e7dab363e0d16192ed00804d0e7a5b48.png

图 1 (网上搜到的简化模式工作流程图说明)

新建项目:ImplicitGrant

AuthorizationServer与ResourceServer还是用之前的项目

8b3542bb7d9ce9664b160e85d665ad88.png

新建Index.cshtml

Access Token

var authorizeUri = 'http://localhost:8270/OAuth/Authorize';

var returnUri = 'http://localhost:3622/Home/SignIn';

var apiUri = 'http://localhost:8001/api/Values';

$('#Authorize').click(function () {

var nonce = 'my-nonce';

var uri = addQueryString(authorizeUri, {

'client_id': '7890ab',

'redirect_uri': returnUri,

'state': nonce,

'scope': 'scope1 scope2',

'response_type': 'token',

});

window.oauth = {};

window.oauth.signin = function (data) {

if (data.state !== nonce) {

return;

}

$('#AccessToken').val(data.access_token);

}

window.open(uri, 'Authorize', 'width=640,height=480');

});

$('#CallApi').click(function () {

$.ajax(apiUri, {

beforeSend: function (xhr) {

xhr.setRequestHeader('Authorization', 'Bearer ' + $('#AccessToken').val());

},

dataType: 'text',

cache: false,

success: function (data) {

console.log(data);

$('#output').text(data);

}

});

});

OK,自此,简化模式测试项目有效代码已经完成了

注意:逻辑是故意写在html页面而没有写在后台cs页面的哦,这是简化模式形成的原因

运行项目试试

开始授权

点击认证按钮,出现认证页面和授权码页面一样

f922728896ee04706b928748ef5cd84c.png

点击授权,直接返回的就是token

47cbbcff500cdf3e1647cdce48b08225.png

点击访问受控资源,发现没有预期那样返回资源数据

23b47cbce794a820ddf81ec45b3f2613.png

这是js跨域的问题,需要在ResourceServer项目加上“microsoft.aspnet.webapi.cors”引用

并在WebApiConfig.cs页面加上

// 跨域配置

config.EnableCors(new EnableCorsAttribute("*", "*", "*"));

在ValuesController中的Get方式上贴上[HttpGet]

public class ValuesController : ApiController

{

[HttpGet]

[Authorize]

public string Get()

{

return "lanxiaoke";

}

}

再次试试,成功返回数据

2b916a5ac34a09301f1a7ddd6d62d3b8.png

asp.net权限认证系列

作者:漂亮的猫

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值