當前位置:首頁 » 網頁前端 » webapitoken
擴展閱讀
webinf下怎麼引入js 2023-08-31 21:54:13
堡壘機怎麼打開web 2023-08-31 21:54:11

webapitoken

發布時間: 2022-09-10 19:01:00

A. 如何使用 Web API 來對 MVC 應用程序進行身份驗證

首先,讓我們先更新 API 項目

我們將先對 API 項目進行必要的修改,修改完成之後再切換到 Web 項目對客戶端進行更新。

第1步:我們需要一個資料庫

在能做任何操作之前我們需要先創建一個資料庫。本例中將使用 SQL Server Express。如果你沒有安裝,可以從這里下載 SQL Server Express。安裝完成之後,創建一個名為 CallingWebApiFromMvc 的資料庫。這就是第一步要做的。

Api 項目還需要一個資料庫連接字元串,否則我們寸步難行。把下面這段代碼插入到 Api 項目的Web.config 文件中:

<connectionStrings>
<add name="ApiFromMvcConnection" connectionString="Data Source=(local);Initial Catalog=CallingWebApiFromMvc;Integrated Security=True" providerName="System.Data.SqlClient" /></connectionStrings>

認證(Identity)框架會自動創建我們管理用戶所需要的成員關系表,現在不需要擔心去提前創建它們。

第2步:添加相關的Nuget包

接下來我們添加用於OWIN和Windows認證的Nuget包。打開包管理控制台,切換Api項目為預設項目,輸入以下命令:

Install-Package Microsoft.AspNet.WebApi.Owin
Install-Package Microsoft.Owin.Host.SystemWeb
Install-Package Microsoft.AspNet.Identity.EntityFramework
Install-Package Microsoft.AspNet.Identity.Owin

使用這些包可以在我們的應用中啟動一個OWIN伺服器,然後通過EntityFramework把我們的用戶保存到SQL Server。

第3步:添加管理用戶的Identity類

我們使用基於Windows認證機制之上的Entity框架來管理資料庫相關的業務。首先我們需要添加一些用於處理的類。在Api項目里添加一個Identity目錄作為我們要添加類的命名空間。然後添加如下的類:

public class ApplicationUser : IdentityUser
{
}

public class ApplicationDbContext : IdentityDbContext<ApplicationUser>
{ public ApplicationDbContext() : base("ApiFromMvcConnection") {}
public static ApplicationDbContext Create()
{ return new ApplicationDbContext();
}
}

注意我們傳給基類構造函數的參數ApiFromMvcConnection要和Web.config中的連接字元串中的name相匹配。

public class ApplicationUserManager : UserManager<ApplicationUser>
{ public ApplicationUserManager(IUserStore<ApplicationUser> store) : base(store)
{
} public static ApplicationUserManager Create(IdentityFactoryOptions<ApplicationUserManager> options, IOwinContext context)
{ var manager = new ApplicationUserManager(new UserStore<ApplicationUser> (context.Get<ApplicationDbContext> ()));
// Configure validation logic for usernames
manager.UserValidator = new UserValidator<ApplicationUser> (manager)
{
= false,
RequireUniqueEmail = true
};
// Configure validation logic for passwords
manager.PasswordValidator = new PasswordValidator
{
RequiredLength = 6,
RequireNonLetterOrDigit = true,
RequireDigit = true,
RequireLowercase = true,
RequireUppercase = true,
}; var dataProtectionProvider = options.DataProtectionProvider;
if (dataProtectionProvider != null)
{
manager.UserTokenProvider = new DataProtectorTokenProvider<ApplicationUser> (dataProtectionProvider.Create("ASP.NET Identity"));
} return manager;
}
}

第4步:添加OWIN啟動類

為了讓我們的應用程序作為OWIN伺服器上運行,我們需要在應用程序啟動時初始化。我們可以通過一個啟動類做到這一點。我們將裝點這個類的
OwinStartup屬性,因此在應用程序啟動時觸發。這也意味著,我們可以擺脫的Global.asax和移動它們的
Application_Start代碼轉換成我們新的啟動類。

using Microsoft.Owin;

[assembly: OwinStartup(typeof(Levelnis.Learning.CallingWebApiFromMvc.Api.Startup))]
namespace Levelnis.Learning.CallingWebApiFromMvc.Api
{
using System;
using System.Web.Http;
using Identity;
using Microsoft.Owin.Security.OAuth;
using Owin;
using Providers;
public class Startup
{ public void Configuration(IAppBuilder app)
{
GlobalConfiguration.Configure(WebApiConfig.Register);
app.CreatePerOwinContext(ApplicationDbContext.Create);
app.CreatePerOwinContext<ApplicationUserManager> (ApplicationUserManager.Create); var oAuthOptions = new
{
TokenEndpointPath = new PathString("/api/token"),
Provider = new ApplicationOAuthProvider(),
AccessTokenExpireTimeSpan = TimeSpan.FromDays(1),
AllowInsecureHttp = true
};
// Enable the application to use bearer tokens to authenticate users
app.UseOAuthBearerTokens(oAuthOptions);
}
}
}

在應用程序啟動時,我們正在建立自己的伺服器。在這里,我們配置令牌端點並設置自己的自定義提供商,我們用我們的用戶進行身份驗證。在我們的例子中,我們使用了ApplicationOAuthProvider類。讓我們來看看現在:

第5步:添加OAuth的提供商

public class ApplicationOAuthProvider :
{ public override Task ValidateClientAuthentication( context)
{
context.Validated();
return Task.FromResult<object> (null);
}
public override async Task GrantResourceOwnerCredentials( context)
{
var userManager = context.OwinContext.GetUserManager<ApplicationUserManager> ();
var user = await userManager.FindAsync(context.UserName, context.Password);
if (user == null)
{
context.SetError("invalid_grant", "The user name or password is incorrect."); return;
}
var oAuthIdentity = await user.GenerateUserIdentityAsync(userManager, OAuthDefaults.AuthenticationType); var cookiesIdentity = await user.GenerateUserIdentityAsync(userManager, CookieAuthenticationDefaults.AuthenticationType); var properties = CreateProperties(user.UserName); var ticket = new AuthenticationTicket(oAuthIdentity, properties);
context.Validated(ticket);
context.Request.Context.Authentication.SignIn(cookiesIdentity);
}
private static AuthenticationProperties CreateProperties(string userName)
{
var data = new Dictionary<string, string>
{
{
"userName", userName
}
};
return new AuthenticationProperties(data);
}
}

我們感興趣的是這里2種方法。第一,ValidateClientAuthentication,只是驗證客戶端。我們有一個客戶端,所以返回成
功。這是一個非同步方法簽名但沒有非同步調用發生。正因為如此,我們可以離開了非同步修改,但我們必須返回一個任務自己。我們增加了一個名為
GenerateUserIdentityAsync的ApplicationUser,它看起來像這樣的方法:

public class ApplicationUser : IdentityUser
{ public async Task<ClaimsIdentity> GenerateUserIdentityAsync(UserManager<ApplicationUser> manager, string authenticationType)
{
var userIdentity = await manager.CreateIdentityAsync(this, authenticationType);
return userIdentity;
}
}

第6步:注冊一個新用戶 - API端
所以,我們有到位的所有Identity類管理用戶。讓我們來看看RegisterController,將新用戶保存到我們的資料庫。它接受一個RegisterApi模式,這是簡單的:

public class RegisterApiModel
{
[Required]
[EmailAddress] public string Email { get; set; }

[Required]
[StringLength(100, ErrorMessage = "The {0} must be at least {2} characters long.", MinimumLength = 6)]
public string Password {
get; set;
}

[Required]
[Display(Name = "Confirm Password")]
[Compare("Password", ErrorMessage = "The password and confirmation password do not match.")]
public string ConfirmPassword { get; set; }
}

控制器本身,如果注冊成功只是返回一個200 OK響應。如果驗證失敗,則返回401錯誤請求的響應。

public class RegisterController : ApiController
{ private ApplicationUserManager UserManager
{ get
{ return Request.GetOwinContext().GetUserManager<ApplicationUserManager> ();
}
} public IHttpActionResult Post(RegisterApiModel model)
{ if (!ModelState.IsValid)
{ return BadRequest(ModelState);
} var user = new ApplicationUser
{
Email = model.Email,
UserName = model.Email,
EmailConfirmed = true
};
var result = UserManager.Create(user, model.Password);
return result.Succeeded ? Ok() : GetErrorResult(result);
}
private IHttpActionResult GetErrorResult(IdentityResult result)
{
if (result == null)
{
return InternalServerError();
}
if (result.Errors != null)
{
foreach (var error in result.Errors)
{
ModelState.AddModelError("", error);
}
}
if (ModelState.IsValid)
{
// No ModelState errors are available to send, so just return an empty BadRequest.
return BadRequest();
}
return BadRequest(ModelState);
}
}

B. asp.net webapi 個人身份驗證 token

重寫AuthorizeAttribute,對你想要禁用的token拋出UnAuthorized

C. 請問html的js調用webapi介面

引用jquery,有很方便的GET調用方法:

<!DOCTYPEhtml>
<html>
<head>
<metahttp-equiv="content-type"content="text/html;charset=UTF-8">
<metaname="viewport"content="width=device-width,initial-scale=1">
<!--src值為文件位置路徑-->
<scripttype="text/javascript"charset="UTF-8"src="javascript/jquery-1.12.1.js"></script>
<title>測試案例</title>
<!--語法:jQuery.getJSON(url,data,success(data,status,xhr))-->
<scripttype="text/javascript"charset="UTF-8">
functiongetToken(){
$.getJSON("http://localhost/kdapi/api/access_token",{"id":111,"secret":2352532},function(result){
alert(result.access_token);
});
}
</script>
</head>
<body>
<buttononclick="getToken()"style="width:120px;height:60px;">獲取Token</button>
</body>
</html>

D. C# webapi訪問java介面時,後台代碼訪問返回403錯誤,使用postMan是可以測試通過的

看你的代碼,你是不是POST的時候忘記帶上某些參數,如access_token。

403錯誤是一種禁止訪問的錯誤,你發出的請求被伺服器可能由於未經過驗證所以請求被伺服器拒絕了。

E. webapi中oauth2 獲取不到access_token

設置一下請求head裡面的屬性

F. 桌面程序怎樣通過webapi獲取json數據

首先要思考下為什麼google要開發api呢,因為google的產品用戶很多,他們的需求也是各種各樣的,打個比方adwords,用戶可以下載google adwords editors這樣的桌面軟體去操作,也可以通過google adwords的界面去操作,但是用戶同時也要操作 推廣助手,有技術的客戶就想 能不能自己開發一款軟體 打通這2個產品google adwords和網路推廣,同時可以操作,所以api介面就給了這樣的可能,這是和同類型產品對接,方便用戶統一操作,
還有一個例子,google analytics自定義運用,每周都需要發報告給客戶,雖然google analytics有自動報告功能,但是如果有報告固定的格式,每周都是人共去google analytics裡面去拉數據 然後填進去的話, 完全可以用web或者客戶端的方式自動去取數據,然後填充到模板裡面(模板可以通過web方式整合成html代碼 再通過api把html代碼中的數字替換)再加個發信函數,這樣每個星期都可以有一份圖文並茂 並且隨時調整模板的報告郵件了,同時你甚至可以同時集合ga和adwords Bai的數據這樣就省掉大量人工發信的時間。這里api的作用是整合其他信息,一起製作需要的產品,節約時間
未來的社會是開發的社會,只有把產品的介面開放出來,用戶安裝自己的想法加以利用就可以讓產品使用的人更加方便

Google analytics的數據是支持通過api按需導出 甚至你可以製作成email或者整合在你的網站後台中,這些都只是需要api,再開始之前先介紹下
什麼是api呢 你可以理解就是通用的函數 可以調用google的服務的數據 例如google analytics數據,
什麼是token,token就是一串帳號密碼,不過這個是隨機變動的,因為在互聯網中傳輸信息,所以最好有一套隨機變動的密碼來保證信息的安全,
什麼是Python,python是一個很簡單的程序語言,安裝下就可以用就和vb一樣 但是他很強壯 據說只要電腦能做的事 他就能做 無所不能 和硬體交互也沒問題的
什麼是Json 文件 是一種類似txt文件的一種文本文件,這里用來保存機密的信息例如你的帳號密碼
什麼是Google api library庫,電腦安裝了python只能說是安裝了一個基本的語言環境,你要實現某些功能還需要程序,google把這些可以操作自己服務的基礎數據的文件打包成庫文件 記住這里的庫並不是所以的google的服務的程序都在裡面,只是定義了一個基本的介面和傳輸方法,你要運行google analytics 還是需要定義一些函數來操作的 然後再引用google api的 庫文件
什麼是客戶端 google的 api分多種 你既可以通過web 的應用來獲取數據(要綁定運行的網站的域名,主要也是為安全) 也可以通過本地的程序,這里為了演示方法 我用的本地程序,所以我這里的客戶端是桌面程序應用

G. 有個足球集錦視頻的背景音樂,誰知道呀,求音樂名字。以下為網址

歌的名字叫《With a spirit》
http://..com/question/145710821.html這里有下載地址

H. 用web api 分離前後台 會不會有風險

1、 OAuth是做什麼的?
在網上瀏覽時,大家都見過這樣的功能:網站A提供了第三方登錄服務,比如使用新浪微博、QQ賬戶登錄。用戶使用第三方賬戶登陸後,第三方返回Token給網站A,當網站A調用第三方服務請求登錄用戶信息時需傳遞該Token給第三方,第三方才允許該服務請求。之後的每次請求無需再次認證,直接使用該Token即可。這就是OAuth的典型應用。
2、 簡單使用介紹 (具體使用OAuth的方法請參考:在ASP.NET中基於Owin OAuth使用Client Credentials Grant授權發放Token)
2.1、用戶登錄的過程即是獲取Token的過程,前端用戶登錄示例代碼如下:

1 $.ajax({
2 type: "POST",
3 url: api_address + "token", //api_address為WebApi服務地址,由於OAuth的使用中設置了屬性TokenEndpointPath = new PathString("/token"),所以請求到「token」鏈接時即可自動進入認證流程。
4 data: { grant_type: "password", username: username, password: password, ran: Math.random() },//傳遞用戶名、密碼、認證方式
5 dataType: "json",
6 success: function (result) {
7 if (result.access_token && result.access_token.length > 0) {
8 //result.access_token即是有效的服務調用憑證,可以把該值存入到Cookie中,以備下次使用。
9 callback(1, "登錄成功。");
10 }
11 else {
12 callback(0, "未知錯誤!");
13 }
14 },
15 error: function (XMLHttpRequest, textStatus, errorThrown) {
16 callback(0, XMLHttpRequest.responseJSON.error);
17 }
18 });

登錄代碼
2.2、當認證方式為password時,已下方法為認證流程中的一步。(認證通過才會返回Token)

1 public override Task GrantResourceOwnerCredentials( context)
2 {
3 var username= context.UserName;
4 var password=context.Password;
5 if(用戶名與密碼不合法)
6 {
7 context.setError(「用戶名或密碼錯誤!」);//認證不通過
8 }
9 else
10 {
11 var oAuthIdentity = new ClaimsIdentity(context.Options.AuthenticationType);
12 oAuthIdentity.AddClaim(new Claim(ClaimTypes.Name, context.UserName));
13 //可以加入用戶信息及其他必要信息到Token中,以便在api服務中使用(使用中HttpContext.Current.User.Identity即為oAuthIdentity對象,WebApi的Controller中可直接使用User.Identity)。
14 oAuthIdentity.AddClaim(new Claim("UserID", user.UserID.ToString()));
15 var ticket = new AuthenticationTicket(oAuthIdentity, new AuthenticationProperties());
16 context.Validated(ticket);//認證通過
17 }
18 return base.GrantResourceOwnerCredentials(context);
19 }

認證代碼
3、 已經獲取了Token,如何使用?
網上的大部分示例都是使用HttpClient調用的方式,而前後端的完全分離作為一種發展趨勢,我們需要Jquery的調用方式。

1 $.ajax({
2 type: 「method」,//get,post,put,delete
3 url:api_address + 「api/Test」,//如果調用webapi中的TestController
4 data: {data},
5 dataType: "json",
6 headers: {
7 "Authorization": "Bearer " + 「token」 //把登錄獲取的Token加入到http請求頭中
8 },
9 success: function (result) {
10 callback(result);
11 },
12 error: function (XMLHttpRequest, textStatus, errorThrown) {
13 //。。。。。。
14 }
15 });

調用Api
4、Api的訪問許可權該如何做?
認證中我們把用戶登錄成功作為認證通過的標志,但不同角色的用戶具有不同的訪問許可權(個人認為認證中應使用最小許可權驗證,如示例中的登錄成功),如何控制有些Controller不能被低許可權用戶訪問。

1 [Authorize]
2 public class TestController: ApiController
3 {
4 // GET api/<controller>
5 public HttpResponseMessage Get(int appid)
6 {
7 return null;
8 }
9 }

一個典型的ApiController
[Authorize]表示訪問該Controller的請求必須經過認證(請求頭中具有Token信息),這里我們可以自定義一個特性去驗證用戶許可權,並替換特性AuthorizeAttribute。(這里僅提供思路,具體做法請自己摸索,不保證以下代碼的正確性)

1 public class CustomeAuthorizeAttribute:System.Web.Http.AuthorizeAttribute
2 {
3 protected override bool IsAuthorized(System.Web.Http.Controllers.HttpActionContext actionContext)
4 {
5 if(base.IsAuthorized(actionContext))
6 {
7 //這里對用戶的許可權進行驗證,actionContext可以獲得請求的是哪一個Controller
8 var user = HttpContext.Current.User.Identity;//Token中帶有的用戶信息
9 if (可以訪問)
10 {
11 return true;
12 }
13 return false;
14 }
15 return false;
16 }
17 }
18

I. enablecors-webapi跨域 為何不能實現有哪些注意事項

上一篇我們介紹了如何使用vue resource處理請求,結合服務端的REST API,就能夠很容易地構建一個增刪查改應用。 這個應用始終遺留了一個問題,Web App在訪問REST API時,沒有經過任何認證,這使得服務端的REST API是不安全的,只要有人知道api地址,就可以調用API對服務端的資源進行修改和刪除。 今天我們就來探討一下如何結合Web API來限制資源的訪問。 本文的主要內容如下: 介紹傳統的Web應用和基於REST服務的Web應用 介紹OAuth認證流程和密碼模式 創建一個基於ASP. Identity的Web API應用程序 基於$.ajax實現OAuth的注冊、登錄、注銷和API調用 基於vue-resource實現OAuth的注冊、登錄、注銷和API調用 本文的最終示例是結合上一篇的CURD,本文的登錄、注冊、注銷和API調用功能實現的。 35 本文9個示例的源碼已放到GitHub,如果您覺得本篇內容不錯,請點個贊,或在GitHub上加個星星! Page Demo GitHub Source 基於$.ajax的示例如下: 注冊示例 登錄和注銷示例 登錄獲取token並調用API示例 注冊、登錄、注銷、調用API綜合示例 基於vue-resource的示例如下: 注冊示例 登錄和注銷示例 登錄獲取token並調用API示例 注冊、登錄...

J. webapi token和basic的區別

web api token是網路編程語言,而Basic是最基本的編程語言。
一、網路編程語言ASP。
ASP即Active Server Pages,是MicroSOft公司開發的伺服器端腳本環境,可用來創建動態互動式網頁並建立強大的web應用程序。當伺服器收到對ASP文件的請求時,它會處理包含在用於構建發送給瀏覽器的HTML(Hyper Text Markup Language,超文本置標語言)網頁文件中的伺服器端腳本代碼。除伺服器端腳本代碼外,ASP文件也可以包含文本、HTML(包括相關的客戶端腳本)和com組件調用。[1-2]
ASP簡單、易於維護 , 是小型頁面應用程序的選擇 ,在使用DCOM (Distributed Component Object Model)和 MTS(Microsoft Transaction Server)的情況下, ASP甚至可以實現中等規模的企業應用程序。[
ASP程序的運行對硬體環境沒有特別的要求,通常具備能夠滿足Windows操作系統運行要求的硬體設備即可。基本內存容量要求為64MB,建議內存容量為128MB或更多。此外,應該有1G以上的硬碟空問用來安裝所需的軟體。

asp軟體環境
在軟體環境方面,因為ASP是Microsoft公司推出的,只有在Microsoft Windows操作系統及其配套的web伺服器軟體的支持下才能運行。MicrosoR公司的各種wiIldows操作系統都可以作為ASP的運行平台。其中,在wiIIdows 98操作系統下運行的Personal w曲Server,一般簡稱為PWS,而hltcmeIll:folma缸on SeⅣer,則簡稱為IIS。[5
二、Basic。
BASIC(Beginners' All-purpose Symbolic Instruction Code,又譯培基),意思就是「初學者通用符號指令代碼」,是一種設計給初學者使用的程序設計語言。BASIC是一種直譯式的編程語言,在完成編寫後不須經由編譯及連結等手續即可執行,但如果需要單獨執行時仍然需要將其建立成執行檔。
BASIC是由達特茅斯學院院長、匈牙利人約翰·凱梅尼(John G. Kemeny)與數學系教師托馬斯·卡茨(Thomas E. Kurtz)共同研製出來的。1964年BASIC語言正式發布。第一個BASIC程序在1964年5月1日早上4時,由BASIC編譯程序進行編譯後成功運行[1] 。1975年,比爾·蓋茨把它移植到PC上。
1998年6月15日,Microsoft公司推出Visual BASIC的第6版(即6.0版本),之後,又推出Visual Basic 6.0中文版[4] 。VB 6.0作為Microsoft Visual Studio 6.0工具套件之一,它提供了圖形化、ODBC實現整合資料瀏覽工具平台,提供了與Oracle和SQL Server的資料庫鏈接工具。VB 6.0的Web開發特性可以使得開發人員以更方便、組件式的方法,開發各種HTML和動態HTML的應用程序。這些新特性,使得VB 6.0成為建立可擴展的企業應用開發平台的理想選擇[6] 。Microsoft公司總裁比爾·蓋茨宣稱:「Visual BASIC是迎接計算機程序設計挑戰的最好例子」[4] 。
2001年,VB.NET發布。由於使用了新的核心和特性,很多VB的程序員都要改寫程序。2005年11月7日,VB.NET 2005(v8.0)發布。它可以直接設計出Windows XP風格的界面,但是其編寫的程序佔用內存較多。2010年4月,VB.NET 2010(v10.0)發布[6] 。
Visual BASIC屬於第四代BASIC,第四代BASIC的特點是:提供圖形界面取代過去的字元界面,是「for Windows」的軟體[4] 。